typescript - 任何扩展类类型的类
问题描述
我将如何声明一个是的类型typeof B
和任何扩展的类B
?我创建了一个接受扩展Component
类的类数组的类型,但这不适用于 TSC 3.(1.4|2.1)。
export class Component<S> {}
export type ComponentClass = new () => Component<{ message: string }>;
export interface ComponentFlags<S> {
imports?: (typeof Component | new () => Component<any>)[]
}
export class Message extends Component<State> {}
export class Dialog extends Component<State> {
constructor(el: HTMLDivElement) {
super({
imports: [Message]
});
}
}
这会在编译时引发错误。
type 'typeof Message' is not assignable to type 'typeof Component'.
解决方案
用这个:
const a = <T extends new(...args: any) => B> (p: T|B) => p;
对于您的情况:
export type NewComponnent = new (...args: any[]) => Component<any>;
export interface ComponentFlags<S> {
imports?: (components: NewComponent[]) => void;
// OR
// imports?: (...components: NewComponent[]) => void;
}
推荐阅读
- amazon-web-services - 将 asp.net 核心 API 部署到 AWS 导致环境不响应错误
- r - 是否可以用 dplyr 计算条件 cumsum
- javascript - 使用 Firebase 绘制 Python Django 的基于时间的图
- java - 然后在抽象类的具体方法中不使用注入模拟时的 Mockito
- javascript - AdaptiveCards 可扩展性
- c++ - Arduino 在通过 String 和 sprintf 将浮点数打印到字符串时非常随机地冻结
- javascript - 用 JavaScript 中的另一个嵌套数组数据更新嵌套数组值
- search - SharePoint 搜索结果排名
- karate - 空手道试跑数次
- reactjs - 状态数据在没有设置状态方法的情况下更新