2016-10-12 4 views
1

私はtypescriptを使い慣れていて、私のコードには多くの繰り返し(data1、data2、data3 ...)があります。OOP/Typescript - クラスコンストラクタがインタフェースされたオブジェクトをparamとして持つ場合、コードを最適化することは可能ですか?

export interface ProjectInterface{ 
    data1: string; 
    data2: string; 
    data3: number; 
} 

export class Project { 
    data1: string; 
    data2: string; 
    data3: number; 

    constructor(obj: ProjectInterface) { 
    this.data1 = obj.data1; 
    this.data2 = obj.data2; 
    this.data3 = obj.data3; 
    } 
} 

私はdata1、data2 ...内部のコンストラクタを渡すことができますが、多くのパラメータを持つと便利ではないことがわかります。

インターフェイスに参照用の単一のエントリポイントがあるようにするためのきれいな回避策はありますか?

+0

コンストラクタでプロパティの初期化を自動化したいですか?私はこれを必ずしも意味最適化のような_optimization_とは呼んでいません。 –

+0

はいプロジェクトクラスの変数宣言を繰り返して初期化を自動化しないようにしたい – sebap

+0

'Project'クラスの' ProjectInterface'タイプの 'data'プロパティを宣言して、なぜthis.data = obj'? 'Object.assign'を使うと、注入されたデータとClassインスタンスが保持するデータとの間にいくらかの柔軟性を導入することも可能です。 –

答えて

2

私はあなたのケースでは、あなたがObject.keysにを使用することができ、これは確かに内のすべての状況を、それをカットされませんが、プロジェクトクラス内の変数の宣言を繰り返さないよう、初期化に

を自動化したいのですがまた、いくつかの基本的な型チェックを実行しながら、objの独自のプロパティを反復:

constructor(obj: ProjectInterface) { 
    Object.keys(obj).forEach(key => { 
     if (this.hasOwnProperty(key) && typeof this[key] == typeof obj[key]) { 
      this[key] = obj[key]; 
     } 
    }); 
} 

これは、しかし、あなたがまた、iniファイルが必要ですhasOwnPropertyがそうでない場合はfalseを返すので、プロパティを適切なデフォルト値に合わせてください。

正しい語彙の範囲thisを保持するES6 arrow functionに注意してください。

+0

ありがとう、私はそのようなことについて考えていた。しかし、私はクラスプロジェクトで変数data1、data2 ..を宣言する必要はないのですか?少し浮気のように見える:) – sebap

+0

残念ながら、あなたがする必要があります。また、それらを初期値に初期化する必要があります( 'hasOwnProperty'がtrueを返すことができるように)、これを答えに含めるのを忘れました。 –

関連する問題