typescript - 如何从匿名类扩展接口
问题描述
假设我有匿名课程:
const AnonymousClass = class {}
let a: typeof AnonymousClass;
如何从中扩展接口?编译器对此失败:
interface I extends typeof AnonymousClass {
}
解决方案
您不能在extends
orimplements
子句中使用表达式,但可以创建类型别名并使用它。您甚至可以使用与匿名类相同的名称,const
因为它们位于不同的空间(值空间与类型空间)
const AnonymousClass = class {
static staticField = 0;
instanceField = 0;
}
let a: typeof AnonymousClass;
type AnonymousClass = typeof AnonymousClass
interface I extends AnonymousClass {
}
let foo: I;
foo.instanceField // invalid
foo.staticField // valid
上面的代码扩展了类的静态接口,你可能想扩展类的实例接口,你可以用一个额外的InstanceType
条件类型来做:
const AnonymousClass = class {
static staticField = 0;
instanceField = 0;
}
let a: typeof AnonymousClass;
type AnonymousClass = InstanceType<typeof AnonymousClass>
interface I extends AnonymousClass {
}
let foo: I;
foo.instanceField // valid
foo.staticField // invalid
推荐阅读
- java - 如何将逗号分隔的字符串和 int 添加到两个不同的数组列表中 [java]
- javascript - 必须按两次 HTML 按钮才能获取表格
- unicode - 在尊重字素簇的同时安全地迭代 Unicode 字符串
- mongodb - 根据不同的输入mongodb查找文档
- python - 有没有办法在列表理解中实现 elif,它在 python 中也有一个 for 循环?
- r - 将 dplyr::if_else() 的整数转换为数字/双精度
- react-native - 带有 Google 登录的 Expo 应用程序未重定向到应用程序
- java - 在 JAVA 中将事件或任务添加到日历 - Netbeans
- matlab - MATLAB 和使用 mod
- google-apps-script - 带有 Google 表格的 Coinbase v2