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