typescript - 构建类数组以在 TypeScript 中使用重载构造函数执行静态方法

标签 typescript

以下代码在 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];

Playground

关于typescript - 构建类数组以在 TypeScript 中使用重载构造函数执行静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62754035/

相关文章:

javascript - 使用对象方法深度克隆类对象?

android - Nativescript:如何关闭 Android 上文本字段的预测?

javascript - 去掉每个文件angular 6的文件扩展名

javascript - 如何在 typescript next.js 中使用顶级 "await"

Angular 2 ng对于 prime-ng 数据列表中的不同类型

javascript - 在一行中创建和改变一个对象

arrays - Angular 2声明一个对象数组

typescript - typescript的订阅方法中 'data'和 '(data)'有什么区别?

typescript - 创建枚举和元组类型之间的关系

typescript - typescript 中枚举的意义是什么