从TypeScript中的泛型类型获取构造函数/实例

时间:2015-12-31 06:58:13

标签: generics typescript

我正在尝试从泛型T创建实例,例如,

class Factory {
    public static generate<T>(): T { 
      return new T();
  }
}

但由于T只是类型而非构造函数,我们无法做到这一点。

是否无法在TypeScript中从泛型类型创建实例?

我也读过这些文章,但找不到解决方案。

1 个答案:

答案 0 :(得分:10)

TypeScript中使用的类型信息在运行时被删除,因此当您调用T时,new T()的信息不可用。

这就是为什么所有替代解决方案都依赖于传递的构造函数,例如使用this example of creating a class dynamically

interface ParameterlessConstructor<T> {
    new (): T;
}

class ExampleOne {
    hi() {
        alert('Hi');
    }
}

class Creator<T> {
    constructor(private ctor: ParameterlessConstructor<T>) {

    }
    getNew() {
        return new this.ctor();
    }
}

var creator = new Creator(ExampleOne);

var example = creator.getNew();
example.hi();