如何使静态方法可继承?

时间:2019-02-22 11:02:35

标签: typescript

我需要做一些元编程,并且必须从函数类包装器继承。它工作得很好,除了它不能识别静态方法也被继承。它们在那里,但是TypeScript看不到。我该如何运作

TypeScript Playground

class A {
  method() {}
  static staticMethod() {}
}

export interface AConstructor { 
  new(): A
}

export function classA(): AConstructor {
  return A
}

class B extends classA() {}

new B().method()
B.staticMethod() // <= error here

1 个答案:

答案 0 :(得分:3)

您的问题与继承无关。默认情况下,派生类可以访问静态方法。

您的问题是classA的签名。它只返回一个返回A的构造函数,而不返回其他方法。使用typeof A或将静态方法添加到接口:

class A {
  method() {}
  static staticMethod() {}
}

export interface AConstructor { 
  new(): A
  staticMethod(): void // No static modifier here
}

export function classA(): AConstructor {
  return A
}

class B extends classA() {}

new B().method()
B.staticMethod()

这也可能起作用:

export function classA(): typeof A {
  return A
}

或者让推理来完成它的工作:

export function classA() {
  return A
}