我想我可以做这样的事情来在TypeScript中创建Generic的新实例:
class Tree<T extends SomeInterface> {
constructor(private elementType: {new(): T}) {
}
public Grow() {
var newElement: T = new this.elementType();
// ...
}
}
但有没有办法让TypeScript知道Generic有一个new()
?换句话说,有什么方法可以让这样的东西起作用吗?
class Tree<T extends SomeInterface> { // <-- Modify the constraint?
public Grow() {
var newElement: T = new T();
// ...
}
}
答案 0 :(得分:4)
但有没有办法让TypeScript知道Generic有一个new()?换句话说,有什么方法可以让这样的东西起作用吗?
不完全。原因是您仍然需要传入将为您新建对象的实体。您不能仅使用编译时约束<T>
作为运行时new T
。
interface SomeInterface{
}
interface SomeInterfaceConstructor<T extends SomeInterface>{
new (): T;
}
class Tree<T extends SomeInterface> {
constructor(private elementType: SomeInterfaceConstructor<T>) {
}
public Grow() {
var newElement = new this.elementType();
// ...
}
}