Typescript类:"重载签名与函数实现不兼容"

时间:2016-09-09 08:39:23

标签: class angular typescript constructor constructor-overloading

我创建了以下类:

GO

我收到以下错误:

  

重载签名与功能实现不兼容

我尝试了几种方法来重载构造函数,我尝试的最后一种方法是我在上面发布的(我从here获得)。

但我仍然得到同样的错误。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:18)

您收到编译错误,因为实现函数的签名不满足您声明的空构造函数 由于您希望拥有默认构造函数,因此它应该是:

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

这两者是等价的。