2017-03-20 8 views
1

別のblogpostsと公式のngnx/storeのドキュメントでリンクされている例では、私は以下のアプローチを "標準的な"方法として見いだしました。ログイン後に店舗にユーザーを追加することに関連するコードを投稿します。ngrx/storeモデル(角2)でインターフェイス定義を強制する方法はありますか?

export interface User { 
    id: number; 
    username: string; 
    email: string; 
}; 
その後

私は、ユーザーのために減速を作成した(:

export interface AppStore { 
user: Observable<User>; 
}; 

これは、Userモデルである:

だから最初に私は、我々のアプリケーションによって処理されるすべてのオブジェクトを表す、AppStoreのインターフェイスを作成しましたペイロードにはユーザーID、電子メール、ユーザー名が含まれます)

export const user: ActionReducer<User> = (state: User, action: Action) => { 
    switch (action.type) { 
    case ADD_USER: 
     return action.payload; 
    default: 
     return state; 
    } 
}; 

最後に、このように店から彼は、ユーザー 'オブジェクト:

user : User; 

    constructor(private store: Store<AppStore>) { 

     this.user = <Observable<User>>this.store.select('user'); 
    } 

私は、次のコードに減速を変更する場合には、無意味なプロパティは私の意見では、ユーザーインターフェイスがこれを避ける必要がある場合でも、最終的なオブジェクトに入りました発生する。

export const user: ActionReducer<User> = (state: User, action: Action) => { 
    switch (action.type) { 
    case ADD_USER: 
     return Object.assign({},action.payload, meaninglessProperty = 'abcd'); 
    default: 
     return state; 
    } 
}; 

だから、私の質問は:AppStoreのインターフェイスは/視覚化する我々のアプリの全体的な店舗の構造を理解したりngrxストアが実際にAppStoreでの特性は、独自のインタフェース契約を尊重することを確認しないためのだけの方法ですか?

  • 場合によっては、私は何が欠けていますか?
  • 場合によっては、インタフェース定義が実行時に強制されるように変更することができますか?

インターフェイスをチェックするとコードが「安全」になり、間違いのリスクが大幅に軽減される、より複雑なシナリオがあるため、これを尋ねます。

答えて

1

あなたは本当にngrxとは関係ありませんが、Object.assignに関してTypescript Type-systemに関するより多くの懸念があります。残念ながらあなたのケースをカバーしていません。また、githubのこのスレッドを見てください。号:https://github.com/Microsoft/TypeScript/issues/10532

関連する問題