我有一个接口和一个实现它的类
export interface ITooltip {
new(elem: HTMLElement, options?: ITooltipOptions);
show(): void;
hide(): void;
toggle(): void;
}
export class Tooltip implements ITooltip {
constructor(private elem: HTMLElement, private options?: ITooltipOptions) {
}
....
}
但是在控制台中我有一个错误:
Class 'Tooltip' incorrectly implements interface 'ITooltip'.
Type 'Tooltip' provides no match for the signature 'new (elem: HTMLElement, options?: ITooltipOptions): any'
我不明白为什么会发生这种错误。
答案 0 :(得分:1)
据我所知,你无法组合类实现的接口和类构造函数接口。
这有效:
export interface ITooltip {
show(): void;
hide(): void;
toggle(): void;
}
export type TooltipConstructor = { new(elem: HTMLElement, options?: ITooltipOptions): Tooltip };
export class Tooltip implements ITooltip {
constructor(private elem: HTMLElement, private options?: ITooltipOptions) {}
show(): void {}
hide(): void {}
toggle(): void {}
}
答案 1 :(得分:0)
您的代码中有几件事情:
首先在Typescript中,您的类必须提供界面中定义的所有字段和函数。这有时候很乏味。如果你想避免这种情况并且它不会破坏你的结构,你可以使用extends而不是implements,然后你就不需要重新定义所有东西了
其次,您不在接口中声明构造函数声明。因此,应删除new(....
句子。
您的代码最终会看起来像这样:
export interface ITooltip {
show(): void;
hide(): void;
toggle(): void;
}
export class Tooltip implements ITooltip {
constructor(elem: HTMLElement, options?: ITooltipOptions) {};
show(): void {};
hide(): void {};
toggle(): void {};
}
无论如何,我建议你首先阅读打字稿的文档来理解这些概念