如果我返回接口(interface)的“自定义”类型并使用 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()(目前是可能的)
最佳答案
Typescript 确实具有多态 this
类型,因此您可以编写此接口(interface):
interface X{
A:()=>Omit<this, "A">,
B:()=>Omit<this, "B">,
C:()=>Omit<this, "C">,
}
但是,这不会执行您想要的操作,因为创建接口(interface)时绑定(bind)的 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
关于Typescript:通过 'this' 获取自定义接口(interface)的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822557/