Typescript 在接口中设置构造函数

Typescript 在接口中设置构造函数,typescript,typescript1.8,Typescript,Typescript1.8,我有一个接口和一个实现它的类 export interface ITooltip { new(elem: HTMLElement, options?: ITooltipOptions); show(): void; hide(): void; toggle(): void; } export class Tooltip implements ITooltip { constructor(private elem: HTMLElement, priva

我有一个接口和一个实现它的类

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'

我不明白为什么会发生此错误。

您的代码中有一些东西:

首先,在Typescript中,类必须提供接口中定义的所有字段和函数。这有时会很乏味。如果您希望避免这种情况,并且它不会破坏您的结构,那么您可以使用extends而不是implements,这样您就不需要重新定义所有内容

其次,不在接口中声明构造函数声明。因此,应删除
新(..
句子

最终,您的代码将如下所示:

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

无论如何,我建议您先阅读typescript的文档,以理解这些概念。据我所知,您不能将类实现的接口与类构造函数接口结合起来

这项工作:

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

()

这没有多大意义,在OOP中是一个全局问题。谷歌搜索它,你会发现许多独立于语言的解决方案,但我需要在接口中声明。这就是我的问题为什么?你确定你需要接口吗?你知道接口是什么吗?如果你真的需要在接口中声明构造函数,你的软件结构就不好为什么?为什么在C#中是好的,但在TS中不是?我需要实现这个接口的所有类都有相同的构造函数。好吧,我不能说它在C#中是如何工作的,但在这篇文章中,你会发现关于这个问题的讨论很好。读了一点之后,我想你说在C#中这根本不是一个问题,我认为这是一个更好的解决方案。谢谢s