2016-08-24 15 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のと同じ名前とタイピングを持って、すべてではありません。

この場合、適切なオプションはありません。

あなたは正確同じメンバーを持つようにしたい、とあなたのクラスがどのprivateまたはprotectedプロパティ/メソッドを持っていない、あなたは何ができる

interface MyClassOptions extends MyClass { 
    extraProp: string; 
} 

一つはベースを作るで書くことができた場合あなたが共有したいオプションだけを持つクラスでは、そこからベースクラスの派生物である "実際の"クラスを使用してインターフェイスを作成します。

+0

私が明示的に言及するのを忘れたことの1つは、「MyClassOptions」のすべてのプロパティがオプションであることです。このソリューションは、すべてのプロパティを非オプションにします。 – RainingChain

関連する問題