sma*_*use 17 constructor class constructor-overloading typescript angular
我创建了以下类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
过载签名与功能实现不兼容
我尝试了几种方法来重载构造函数,我尝试的最后一个是我在上面发布的(我从这里得到).
但我仍然得到同样的错误.我的代码出了什么问题?
Nit*_*mer 23
您得到该编译错误,因为实现函数的签名不满足您声明的空构造函数.
由于你想拥有默认的构造函数,它应该是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
请注意,实际实现中的所有参数都是可选的,因为默认构造函数没有参数.
这样,实现功能具有满足其他签名的签名.
但是你可以拥有那个单一的签名,而不需要声明另外两个:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
两者是等价的.
| 归档时间: |
|
| 查看次数: |
12997 次 |
| 最近记录: |