我正在尝试从泛型T
创建实例,例如,
class Factory {
public static generate<T>(): T {
return new T();
}
}
但由于T
只是类型而非构造函数,我们无法做到这一点。
是否无法在TypeScript中从泛型类型创建实例?
我也读过这些文章,但找不到解决方案。
答案 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();