在TypeScript中,如何在实现的接口中进行构造函数重载?

14 浏览
0 Comments

在TypeScript中,如何在实现的接口中进行构造函数重载?

我试图重载一个实现接口的类的构造函数,但是我遇到了以下错误:

[0] app/foo.ts(12,5): error TS2394: 重载签名与函数实现不兼容。

export interface Item {

time: number;

}

export class Foo implements Item {

public time: number;

public name: string;

constructor();

constructor(

time: number,

name: string

) {

this.time = id || -1

this.name = name || ""

};

}

我发现了其他类似的问题(Constructor overload in TypeScript),但是我可能遗漏了什么,因为它不起作用。 TypeScript 版本是 1.8.9。

0
0 Comments

在TypeScript中实现接口时,如何进行构造函数重载的问题?

问题的原因是实现签名不可见。您需要声明所有调用者应该看到的重载,然后编写实现部分。

解决方法是在接口实现类中声明多个构造函数重载。在这个例子中,我们可以声明两个构造函数重载,一个没有参数,一个带有两个参数。然后在实现部分中,根据传入的参数个数进行不同的处理。

具体代码如下:

export interface Item {
    time: number;
}
export class Foo implements Item {
    public time: number;
    public name: string;
    constructor();
    constructor(
        time: number,
        name: string
    );
    constructor(
        time?: number,
        name?: string
    ) { 
        this.time = time || -1;
        this.name = name || "";
    }
}

这样,我们就可以根据不同的参数个数调用不同的构造函数。

另外,您还可以阅读TypeScript FAQ中关于这个问题的条目,了解更多信息。

[TypeScript FAQ链接](https://github.com/Microsoft/TypeScript/wiki/FAQ#why-am-i-getting-supplied-parameters-do-not-match-any-signature-error)

0