Class Typescript类:";重载签名与函数实现不兼容“;
我创建了以下类:Class Typescript类:";重载签名与函数实现不兼容“;,class,angular,typescript,constructor,constructor-overloading,Class,Angular,Typescript,Constructor,Constructor Overloading,我创建了以下类: export class MyItem { public name: string; public surname: string; public category: string; public address: string; constructor(); constructor(name:string, surname: string, category: string, address?: string); constructor(name
export class MyItem {
public name: string;
public surname: string;
public category: string;
public address: string;
constructor();
constructor(name:string, surname: string, category: string, address?: string);
constructor(name:string, surname: string, category: string, address?: string) {
this.name = name;
this.surname = surname;
this.category = category;
this.address = address;
}
}
我得到以下错误:
重载签名与函数实现不兼容
我尝试了几种方法来重载构造函数,最后一种是我在上面发布的(我从中获得的)
但我还是犯了同样的错误。我的代码出了什么问题?由于实现函数的签名不满足您声明的空构造函数,因此会出现编译错误。
由于您希望使用默认构造函数,它应该是:
class MyItem {
public name: string;
public surname: string;
public category: string;
public address: string;
constructor();
constructor(name:string, surname: string, category: string, address?: string);
constructor(name?: string, surname?: string, category?: string, address?: string) {
this.name = name;
this.surname = surname;
this.category = category;
this.address = address;
}
}
()
请注意,实际实现中的所有参数都是可选的,这是因为默认构造函数没有参数。这样,实现函数具有一个同时满足其他两个签名的签名 但您可以只拥有一个签名,而无需声明其他两个:
class MyItem {
public name: string;
public surname: string;
public category: string;
public address: string;
constructor(name?: string, surname?: string, category?: string, address?: string) {
this.name = name;
this.surname = surname;
this.category = category;
this.address = address;
}
}
()
这两者是等价的。你想做什么?您希望有一个空(默认)构造函数和另一个接收所有这些参数的构造函数?为什么要写出第二个构造函数两次?@NitzanTomer:是的。@HubertGrzeskowiak:我在链接的答案中看到了。这只是一个猜测,但可能重载签名与函数实现不兼容。