首页 > 解决方案 > Typescript:用'this'获取自定义界面的类型?

问题描述

如果我返回一个“自定义”类型的接口并使用 typeof 那么我会得到原始类型(我明白为什么,我读过它),但我可以获得自定义类型吗?

如果我有以下情况:

interface X{
   A:()=>Omit<typeof this, "A">,
   B:()=>Omit<typeof this, "B">,
   C:()=>Omit<typeof this, "C">,
}

let X : X = {...}

如果想让以下事情成为可能:

即1:XA().B().C()

即2:XC().A().B()

但不是: XA().B().A() (目前是可能的)

标签: typescripttypesinterface

解决方案


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

游乐场链接


推荐阅读