TypeScript - 在擦除类型后获取泛型类型信息

时间:2018-03-01 15:16:57

标签: typescript

由于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 } 完成吗?
  • 有更好的方法吗?

1 个答案:

答案 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 {

    };
}