我可以告诉TypeScript Generic类型有构造函数吗?

时间:2015-10-28 15:13:38

标签: generics typescript

我想我可以做这样的事情来在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();
        // ...
    }
}

1 个答案:

答案 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();
        // ...
    }
}