打字稿类:"重载签名与函数实现不兼容"



我创建了以下类:

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;
    }
}

(code in playground)

注意,实际实现中的所有参数都是可选的,这是因为默认构造函数没有参数。
这样,实现函数就有了一个满足其他两个签名的签名。

但是你可以只使用一个签名而不需要声明另外两个签名:

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;
    }
}

(code in playground)

最新更新