2017-03-09 1 views
0

デコレータを使用して、インターフェイスの特定のプロパティをカスタム情報でマークできますか?ベスト デコレータを使用して、インターフェイスプロパティにメタデータを追加する

は例で説明した:

のApp状態インターフェイス:これは可能です

persistState(state) { 
    let newState = {}; 

    Object.keys(state).forEach((key) => { 
     if (state[key] is decorated with @persist) { 
      newState[key] = state[key]; 
     } 
    }); 

    // Persist newState... 
} 

:関連するすべての状態情報を持続

export interface AppState { 
    @persist userData: UserData, 
    @persist selectedCompany: UserCompany, 

    // userCompanies should not be persisted since they are always 
    // fetched afresh from the server... 
    userCompanies: UserCompany[] 
} 

方法を?
もしそうなら、私は正しい方向で私を指すためにいくつかのリソースを本当に感謝しています!
そうでない場合は、優雅な選択肢はありますか?

+1

[docs](https://www.typescriptlang.org/docs/handbook/decorators.html)のように、デコレータをインターフェイスに使用することはできません。「デコレータは、アノテーションとメタの両方を追加する方法を提供します**クラス宣言とメンバ**の構文を書いています。実行時にインタフェースが存在しないため、デコレータを追加できません。あなたはクラスにインターフェイスを変更することができますし、行くことをお勧めします –

+0

私はそう思った。私のアプリケーション状態は純粋なJSオブジェクト(redux)で構築する必要があります。なぜなら、私はこのクラスを使用することができません... – suamikim

+0

デコレータは実験的な機能です(少なくともECMAScriptにwrtします)。彼らはES7の一部ではありません。 –

答えて

1

はデコレータが実行時に実際に存在するものの上で動作として

番号インターフェイスがデコレータで使用することはできませんいくつかのカスタム情報とインターフェイスの特定のプロパティをマークするためにデコレータを使用することが可能です。 (インタフェースは消去されます)。

関連する問題