如果我返回接口的“自定义”类型并且使用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()(目前可能)
答案 0 :(得分:3)
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