javascript - 泛型 : Create instance from abstract class

标签 javascript typescript

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

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/

相关文章:

javascript - react -在单独的组件中调用Axios时setState不重新呈现页面

javascript - 使用 index.ts 导出 'default'

javascript - 巴西电话号码的正则表达式

javascript - 当宽度小于 644 时如何更改粘性菜单

javascript - D3力图渲染节点和链接

javascript - 将 ENUM 与 Typescript 和 Knockout 结合使用

c# - Angular 2 Http 删除 header 以便与 Web API REST 一起使用

javascript - 误报 "Unreachable code detected.ts(7027)"?

javascript - 字符串元素和对象键值

javascript - $location.path(redirecturl) 和 $location.url(redirecturl) 有什么区别?