typescript - 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() (目前是可能的)
解决方案
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
推荐阅读
- javascript - 使用带有自定义组件的 redux-form 反应 JS
- javascript - 导入和安装 Siema
- android - 在 Android O 中发送本地通知
- wordpress - Wordpress - search.php 中两个日期之间的搜索结果
- python - 删除python numpy数组中与列的前n个值不对应的所有行
- python - 使用 API 将通用二进制文件上传到 GDrive
- python - LSTM Keras 中的生成器函数,用于输出一个文件的小批量
- less - Sublime text 3 - 无法加载插件 clean-css 请确保它安装在less下或与less相同的级别
- vba - VBA 编译错误语法错误是什么问题?
- javascript - 如何将js中的字符串评估为模板