typescript - Typescript:如何推断实现接口的类类型
问题描述
给个接口
interface IAnInterface {
}
如何引用和指向实现该接口的类类型!
意义!上课:
class AClassThatImplmentsAnInterface implements IAnInterface {
}
如何引用属于类类型的类型!相当于:
typeof AClassThatImplementsAnInterface
但在接口层面!指向所有实现接口的类!
所以如果我这样做:
type IClassTypeMapping = {
[names in SomeLiteralStringUnion]: Class<IAnInterface>
}
打字稿中当然Class
不存在!但我想我很好地解释了我在问什么!如何引用Class<IAnInterface>
!?
在打字稿中甚至可能!?
否则,如果它只是类!我们可以用typeof MyClass
!
也适用于上述类型!如果我们为实现类的类创建映射对象!我们总是可以这样做:
export const myMapping = {
Name1: Class1,
Name2: Class2,
// ...
};
// then:
export type MyMappingType = typeof myMapping;
并且为了避免歧义!因为我说了很多!问题是:如何引用 的等价物Class<IAnInterface>
?打字稿有可能吗?
解决方案
我假设您正在尝试映射到类本身,而不是类的实例。所以基本上一些东西是可构造的。我认为这种类型应该适合你:
type Class<I, Args extends any[] = any[]> = new(...args: Args) => I;
我们声明Class<IAnInterface>
可以使用new
关键字和一些参数调用它,并将返回一个IAnInterface
对象(类实例)。
第二个参数Args
允许您定义构造函数参数是什么。如果没有参数,它将是一个空数组。
declare const MyClass: Class<IAnInterface, []>;
const instance: IAnInterface = new MyClass();
declare const OtherClass: Class<IAnInterface, [number, string]>;
const otherInstance: IAnInterface = new OtherClass(0, "");
推荐阅读
- node.js - 将 Node.js BOT 连接到 MS Azure SQL 数据库
- android - 通过意图在活动之间传递变量会引发 NullPointerException
- ios - Swift iOS -AshleyMills Reachability 每隔几秒就会打开和关闭 wifi
- asp.net - 没有“访问控制允许来源”的请求 - Angular 4 / ASP.net
- java - Java 使用 lambda 表达式重构数据结构
- swift - 下载状态在重新加载时消失
- google-sheets - 使用 query() 从另一个单元格动态提取月份值
- node.js - Hyperledger Fabric nodejs sdk 性能问题
- php - Symfony 4 命令行发送 JSON 字符串数组
- python - 如何在python中绘制时间序列数组并显示置信区间?