在编译以下示例时,我遇到打字错误:
class A {
public static then() {
return this;
}
}
class B extends A {
public static shouldWorks() { return 42; }
}
console.log(B.then().shouldWorks());
编译器返回:
error TS2339: Property 'shouldWorks' does not exist on type 'typeof A'.
但是当我尝试执行已编译的脚本时,它可以工作!
怎么了?
答案 0 :(得分:1)
this
不是多态的。因此,从this
返回类时,typeof A
就是then
,因此B
中添加的方法对此类没有影响。
您可以通过为this
参数添加类型来模拟多态this
。 this
的类型将是从呼叫站点推断出的类型参数:
class A {
public static then<TThis extends new (...a: any[]) => A>(this: TThis) {
return this;
}
}
class B extends A {
public static shouldWorks() { return 42; }
}
console.log(B.then().shouldWorks());