类继承和静态方法的Typescript错误

时间:2019-05-10 10:51:15

标签: typescript

在编译以下示例时,我遇到打字错误:

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'.

但是当我尝试执行已编译的脚本时,它可以工作!

怎么了?

1 个答案:

答案 0 :(得分:1)

静态方法中的

this不是多态的。因此,从this返回类时,typeof A就是then,因此B中添加的方法对此类没有影响。

您可以通过为this参数添加类型来模拟多态thisthis的类型将是从呼叫站点推断出的类型参数:

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());