泛型:从抽象类创建实例

时间:2017-10-16 20:58:38

标签: javascript typescript

我正在尝试创建一个类的实例,但编译时错误是:

  

无法创建抽象类'QueueProcess'的实例。

但是,我没有创建它的实例,我正在创建一个扩展QueueProcess的类的实例。那么,为什么我会收到此错误?

export class Queue<T extends QueueProcess> {

    private _queue: T[] = []

    private async runFirstProcess() {
      let process = new this._queue[0]
    }

}

export abstract class QueueProcess {

}

编译后的代码运行正常,只是抛出编译时错误。

2 个答案:

答案 0 :(得分:4)

因此,首先,行T extends QueueProcess意味着T是QueueProcess的实例,它不会是新的。要访问构造函数类型,您需要T extends typeof QueueProcess

但是这无论如何都行不通,因为QueueProcess本身扩展了QueueProcess,并且因为它是抽象的,所以typescript会抱怨这一点。因此,使T扩展一个返回QueueProcess的新函数,例如:

export class Queue<T extends new () => QueueProcess> {

    private _queue: T[] = []

    private async runFirstProcess() {
        let process = new this._queue[0]()
    }

}

export abstract class QueueProcess {

}

答案 1 :(得分:-1)

为了满足代码分析器,我重写了一段代码。它被放置here。但是,您的代码与new this._queue[0]存在问题。此外,在当前之后放置的类是一个坏主意。

结果代码是

export abstract class QueueProcess {

}

export class Queue<T> extends QueueProcess {

    private _queue: T[] = []

    private async runFirstProcess() {
      let process = new this._queue[0]
    }

}