打字稿 class:"Overload signature is not compatible with function implementation"
Typescript class: "Overload signature is not compatible with function implementation"
我创建了以下 class:
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;
}
}
我收到以下错误:
Overload signature is not compatible with function implementation
我尝试了几种重载构造函数的方法,我尝试的最后一种方法是我在上面发布的(我从 获得的)。
但我仍然得到同样的错误。我的代码有什么问题?
你得到那个编译错误是因为实现函数的签名不满足你声明的空构造函数。
因为你想有默认的构造函数,它应该是:
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;
}
}
两者是等价的
我创建了以下 class:
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;
}
}
我收到以下错误:
Overload signature is not compatible with function implementation
我尝试了几种重载构造函数的方法,我尝试的最后一种方法是我在上面发布的(我从
但我仍然得到同样的错误。我的代码有什么问题?
你得到那个编译错误是因为实现函数的签名不满足你声明的空构造函数。
因为你想有默认的构造函数,它应该是:
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;
}
}
两者是等价的