typescript构造函数重载,期望参数少于给定

Kev*_* O. 2 typescript

我想要2个不同的构造函数.一个用于ID,一个用于Id,firstname和boolean值.

界面:person.ts

export interface Person {
  id: number;
  firstname?: string;
  good?: boolean;
}
Run Code Online (Sandbox Code Playgroud)

类:Employee.ts

import { Person } from './person';

export class Employee implements Person {

  id: number;

  constructor(id: number);
  constructor(id: number, firstname?: string, public good?: boolean) { }
}
Run Code Online (Sandbox Code Playgroud)

应用程序:

import { Employee } from './employee';

export class AppComponent {
  e1 = new Employee(3); // does work
  e2 = new Employee(2,'Mr Nice', true); // does not work

}
Run Code Online (Sandbox Code Playgroud)

打字稿信息很明确:"期待1个参数但得到3"我认为当我声明3个参数时它应该自动使用第二个构造函数.

Tit*_*mir 5

根据规范,实现的签名不包括在公共类型中.您可以编写以下内容以获得两个签名:

export class Employee implements Person {

    id: number;

    constructor(id: number);
    constructor(id: number, firstname?: string, good?: boolean);
    constructor(id: number, public firstname?: string, public good?: boolean) { }
}
Run Code Online (Sandbox Code Playgroud)

同样在这种情况下,您实际上不需要具有两个重载.将最后两个参数声明为可选也可以正常工作:

export class Employee implements Person {
    id: number;
    constructor(id: number, public firstname?: string, public good?: boolean) { }
}
new Employee(10)
new Employee(10, "", true)
Run Code Online (Sandbox Code Playgroud)