首页 > 解决方案 > 任何扩展类类型的类

问题描述

我将如何声明一个是的类型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'.

标签: typescript

解决方案


用这个:

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;
}

推荐阅读