gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:35:44 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com