我正在尝试创建一个类的实例,但编译时错误是:
Cannot create an instance of the abstract class 'QueueProcess'.
但是,我不是在创建它的实例,而是在创建一个扩展 QueueProcess
的类的实例。那么,为什么会出现此错误?
export class Queue<T extends QueueProcess> {
private _queue: T[] = []
private async runFirstProcess() {
let process = new this._queue[0]
}
}
export abstract class QueueProcess {
}
代码一旦编译就可以正常工作,只是抛出编译时错误。
最佳答案
因此,首先,行 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 {
}
关于javascript - 泛型 : Create instance from abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779005/