2016-08-24 61 views
1

我有一個名爲MyClass的類。它有一堆屬性。 我想創建一個包含該類的選項的接口。許多選項的名稱和輸入都與MyClass相同,但不是全部。Typescript:基於類創建接口

編輯:大多數選項屬性是可選的。

目標是儘可能少的複製。

現在,我使用虛擬對象來避免代碼重複。有沒有比這更清潔的解決方案?

class MyClass { 
    callback:(p0:number,p1:string,p2:string[]) => number[]; 
    myAttr:number; 
    composed:string; 

    constructor(options:MyClassOptions){ 
     if(options.callback !== undefined) 
      this.callback = options.callback; 
     if(options.myAttr !== undefined) 
      this.myAttr = options.myAttr; 
     if(options.composedP1 !== undefined && options.composedP2 !== undefined) 
      this.composed = options.composedP1 + options.composedP2; 
    } 
} 

var dummy = <MyClass>null; 
interface MyClassOptions { 
    callback?:typeof dummy.callback; 
    myAttr?:typeof dummy.myAttr; 
    composedP1:string; 
    composedP2:string; 
} 

回答

1

許多選項具有相同的名稱和打字比MyClass的,但不是全部。

如果是這樣的話,有沒有一個很好的選擇。

如果你想有完全相同相同的成員,和你的類沒有任何privateprotected屬性/方法,你可以寫

interface MyClassOptions extends MyClass { 
    extraProp: string; 
} 

有一兩件事你可以做的是做一個基地只需要你想要共享的選項,就可以從那裏使用你所使用的作爲基類派生的「真實」類的接口。

+0

我忘了明確提到的一件事是'MyClassOptions'中的所有屬性都是可選的。該解決方案使所有屬性都是非可選的。 – RainingChain