在TypeScript中,是否有一种方法可以让类在子类化时引用其构造函数?
abstract class Base<T> {
constructor(readonly value: T) {}
abstract getName(): string;
clone() {
const Cls = this.constructor;
return new Cls(this.value);
}
}
在此代码段中,Cls
的类型为Function
,因此编译器抱怨:“不能将'new'用于其类型缺少调用或构造签名的表达式。”
答案 0 :(得分:3)
Typescript没有为构造函数使用严格的类型(它仅使用Function
),并且由于它不是构造函数,因此无法用new
进行调用。
简单的解决方案是使用类型断言:
abstract class Base<T> {
constructor(readonly value: T) { }
abstract getName(): string;
clone() {
// Using polymorphic this ensures the return type is correct in derived types
const Cls = this.constructor as new (value: T) => this;
return new Cls(this.value);
}
}