以下代码在 TypeScript 中不正确。编译器不喜欢数组的类型。 “类型‘typeof FolderDetailMainComponent’不可分配给类型‘typeof BaseDetailComponent’”。如果子类没有用新参数重载构造函数,它就可以工作。 “Array”类型似乎是执行静态方法“say”所必需的。
export class BaseDetailComponent {
constructor() {}
static say(){}
}
export class FolderDetailMainComponent extends BaseDetailComponent {
constructor(private myIncjet: string) { // <--- this "breaks the type"
super();
}
static say() {
console.log("Hello")
}
}
const example : Array<typeof BaseDetailComponent> = [ FolderDetailMainComponent]; // Error Type 'typeof FolderDetailMainComponent' is not assignable to type 'typeof BaseDetailComponent'
example.map(p => p.say())
最佳答案
所以问题是构造函数可调用/可更新签名。一种(我能想到的)省略它的方法是使用映射类型(因为它们映射已知属性并且不带有可调用签名):
type ExcludeCallable<T> = { [K in keyof T]: T[K] };
const example: Array<ExcludeCallable<typeof BaseDetailComponent>> = [FolderDetailMainComponent];
关于typescript - 构建类数组以在 TypeScript 中使用重载构造函数执行静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62754035/