Typescript:用'this'获取自定义界面的类型?
Posted
技术标签:
【中文标题】Typescript:用\'this\'获取自定义界面的类型?【英文标题】:Typescript: Get the type of the custom interface with 'this'?Typescript:用'this'获取自定义界面的类型? 【发布时间】:2020-09-01 11:24:09 【问题描述】:如果我返回一个“自定义”类型的接口并使用 typeof,那么我会得到原始类型(我明白为什么,我读过),但我可以获得自定义类型吗?
如果我有以下情况:
interface X
A:()=>Omit<typeof this, "A">,
B:()=>Omit<typeof this, "B">,
C:()=>Omit<typeof this, "C">,
let X : X = ...
如果想让以下事情成为可能:
即1: X.A().B().C()
即2: X.C().A().B()
但不是: X.A().B().A()(目前可以)
【问题讨论】:
【参考方案1】:Typescript 确实有一个多态的this
类型,所以你可以写这个接口:
interface X
A:()=>Omit<this, "A">,
B:()=>Omit<this, "B">,
C:()=>Omit<this, "C">,
但这不会做你想做的事,因为this
类型是在创建接口时绑定的,而不是基于调用函数的对象的类型。
我们可以使用函数的this
参数和泛型类型参数来捕获调用函数的对象的类型。这将按您的预期工作:
interface X
A:<T>(this: T)=>Omit<T, "A">,
B:<T>(this: T)=>Omit<T, "B">,
C:<T>(this: T)=>Omit<T, "C">,
let X: X = null!
X.A().B().C()
X.C().A().B()
X.A().B().A() // err
Playground Link
【讨论】:
我想知道为什么多态this
不 只评估调用该方法的对象的类型。表现?还是一些我没有看到的正确性问题?
@jcalz 我认为这将是一个性能陷阱。使每个调用站点成为通用推理站点可能会降低性能。再说一次,多态this
的使用频率如何?可能不会很多。可能是一个有趣的 GH 讨论主题,尽管在这一点上它只是一个学术讨论,因为这将是一个突破性的变化。
但是如果我想返回一个新类型的 X 怎么办?我只能自己退货
您的意思是要省略其中的属性?检查这个答案:***.com/questions/56255212/…以上是关于Typescript:用'this'获取自定义界面的类型?的主要内容,如果未能解决你的问题,请参考以下文章