Typescript:通过 'this' 获取自定义接口(interface)的类型?

标签 typescript types interface

如果我返回接口(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

Playground Link

关于Typescript:通过 'this' 获取自定义接口(interface)的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822557/

相关文章:

reactjs - 如何在保持类型非可选的同时抽象传递重复的子属性?

Java泛型(简单案例,推理清晰)

javascript - 缩小/丑化我的应用程序

javascript - Void 类型不可分配给 Boolean 类型(React/Typescript)

types - swi-prolog 中的 Prolog 类型定义

泛型和接口(interface)的Delphi错误

java - 从 Java 中的多个类继承(并且可能不使用接口(interface))

c# - 是否可以将接口(interface)作为松散耦合的参数

typescript - 如何在 Typescript 中显式导入接口(interface)?

javascript - Javascript 中的字符串 <-> 数字转换