问题
我有一个抽象类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
类下将有许多静态方法。
我的问题:
如何调用从另一个静态类实例化子实例的静态类(基本上解决上面代码中的错误)