我正在用 Typescript 构建一个类系统。有一个主要的抽象类Component,它有一个静态方法create()。将调用此方法来构建特定实例
abstract class Component {
static build() {
// some additional logic here, for example, cache to reuse instances
return new this();
}
}
class Button extends Component { }
class Input extends Component {}
Button.build(); // returns Button instance
Input.build(); // returns Input instance
Run Code Online (Sandbox Code Playgroud)
这种方法在 Javascript 中运行良好,但是 Typescript 在 行报告错误new this(),说“无法创建抽象类的实例”。
我如何解释打字稿该方法将在派生实例上调用,而不是直接在主抽象类上调用?也许还有其他方法可以实现我需要的 API?
thisis typeof Component,并且因为Component是抽象类,new this是不可接受的。即使Component不是抽象的,Button.build()返回类型也不会在子类中正确处理。
它需要一些类型提示,通过泛型方法:
abstract class Component {
static build<T = Component>(this: { new(): T }) {
return new this();
}
}
class Button extends Component { }
const button = Button.build<Button>(); // button: Button
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2298 次 |
| 最近记录: |