在TypeScript中,如何在实现的接口中进行构造函数重载?
在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。
在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)