2017-11-27 3 views
1

私は2つの異なるコンストラクタが必要です。 1つはIDのみ、もう1つはId、firstname、ブール値です。typescriptのコンストラクタがオーバーロードされていて、与えられた引数よりも少ない引数を期待しています

インタフェース:person.ts

export interface Person { 
    id: number; 
    firstname?: string; 
    good?: boolean; 
} 

クラス:Employee.ts

import { Person } from './person'; 

export class Employee implements Person { 

    id: number; 

    constructor(id: number); 
    constructor(id: number, firstname?: string, public good?: boolean) { } 
} 

アプリケーション:

import { Employee } from './employee'; 

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

} 

typescriptですメッセージは明確である:「1つの引数を期待しかし3を得ました" 私は3つの引数を宣言すると、自動的に2番目の引数コンストラクタ。

答えて

2

specによれば、実装の署名はパブリックタイプに含まれません。

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) { } 
} 

この場合も、実際には2つのオーバーロードを持つ必要はありません。最後の2つのパラメータをオプションとして宣言することもできます。

export class Employee implements Person { 
    id: number; 
    constructor(id: number, public firstname?: string, public good?: boolean) { } 
} 
new Employee(10) 
new Employee(10, "", true) 
関連する問題