由于TypeScript使用类型擦除作为泛型,我正在研究在运行时收集类型信息的替代解决方案。
我提出的解决方案类似于Java中使用Class<T>
的解决方案。
它有效,但它感觉不到...... 完成
type Class<T> = { prototype: T }
function passMeAClass<T>(cls: Class<T>): void {
console.log(cls);
}
passMeAClass(String)
type Class<T> = { prototype: T }
完成吗?答案 0 :(得分:1)
实现此目的的方法通常是使用构造函数签名(类似于函数签名但在其前面有new
):
type Constructor<T> = new (... args: any[]) => T;
function passMeAClass<T>(cls: Constructor<T>): void {
console.log(cls);
}
passMeAClass(String)
这样做的好处是能够在函数中新建对象。 (所以new cls()
就是这样的。)
对于mixin场景,您可以使用cls
作为基本类型(您的版本不起作用):
function extendTheClass<T extends Constructor<{}>>(cls: T) {
return class X extends cls {
};
}