使用另一个静态方法调用实例化父级静态方法内的子类

时间:2019-06-09 18:43:18

标签: typescript class oop static instance

问题

我有一个抽象类Model

abstract class Model{
    static find(id: number) {
        const instance = this.newInstance();
        // ...
        return instance;
    }

    static newInstance() {
        return new this;
    }
}

当然,我们收到一个打字错误,写着Cannot create an instance of an abstract class。我们可以通过覆盖this方法的newInstance来解决此问题:

abstract class Model{
    // ...
    static newInstance(this: new() => Model) {
        return new this;
    }
}

但是随后问题出现在find方法中:The 'this' context of type 'typeof Model' is not assignable to method's 'this' of type 'new () => Model'. Cannot assign an abstract constructor type to a non-abstract constructor type.

无法像this方法那样覆盖find方法的newInstance,因为我们会得到Property 'newInstance' does not exist on type 'new () => Model'.

我的解决方案

我唯一能找到的解决方案是在this的类型声明中添加新的实例方法:

abstract class Model {
    static find(this: {new: () => Model, newInstance: () => Model}, id: number) {
        // ...
    }
    // ...
}

但这不是很实际,因为在Model类下将有许多静态方法。

我的问题:

如何调用从另一个静态类实例化子实例的静态类(基本上解决上面代码中的错误)

0 个答案:

没有答案