2017-03-15 35 views
-1

我有像一些可選變量的接口:Typescript - 爲什麼我應該重寫所有成員來實現一個接口?

interface A { 
    id: string; 
    name?: string; 
    email?: string; 
    ... 
} 

我想要做的是,

class B implements A { 
    constructor(x: string, y: string, ...) { 
     this.id = x; 
     this.name = y; 
     ... 
    } 

    getName(): string { 
     return this.name; 
    } 
} 

我不想重寫我會用所有的成員,我需要一些成員保持可選。每個接口將只有一個類來實現,所以如果我重寫所有成員class Binterface A變得無用。

您可能會問「爲什麼您需要interface A?」。我需要它,因爲我使用它從一些其他的項目,我必須extend,並與一些功能implement它。

任何有關該實現的解決方案或不同的想法?

+0

你可以使用基類來代替接口(A)和使用'B類擴展A'。在這種情況下,您將不需要所有這些成員B中 –

+0

我不應該改變'接口A',它是由另一個開發人員提供給我申報。 –

+0

在這種情況下,你必須執行它.. –

回答

0

一種選擇是使用Object.assign像這樣:

interface A { 
    id: string; 
    name?: string; 
    email?: string; 
} 

class B implements A { 
    id: string; 
    name: string; 
    email: string; 

    constructor(data: A) { 
     Object.assign(this, data); 
    } 

    getName(): string { 
     return this.name; 
    } 
} 

code in playground

+0

謝謝,這可能對我非常有用。在'B類'中沒有辦法擺脫重寫'id','name','email',..的方法嗎? –

+0

否,否則編譯器會抱怨'B'未能執行'A' –

相關問題