2017-05-16 5 views
1

は、私が使用してngrx /ストアのドキュメントを通過してきたangular2ngrx/storeのストアメンバーにアクセスするための型安全な方法はありますか?

https://github.com/ngrx/store

上記の例のアプリは、私が使用して店舗の観察可能なメンバーにアクセスする必要があります意味https://github.com/ngrx/example-app

counter: Observable<number>; 
constructor(private store: Store<AppState>){ 
    this.counter = store.select('counter'); 
} 

'counter'という文字列を使用してオブジェクトメンバにアクセスすると、TypeScriptと対称的に感じられます。ストアメンバーにアクセスするための型安全な方法はありますか?

答えて

2

あなたはselectの実装を見てみると:

export function select<T, R>(pathOrMapFn: any, ...paths: string[]): Observable<R> { 
    let mapped$: Observable<R>; 
    if (typeof pathOrMapFn === 'string') { 
    mapped$ = pluck.call(this, pathOrMapFn, ...paths); 
    } 
    else if (typeof pathOrMapFn === 'function') { 
    mapped$ = map.call(this, pathOrMapFn); 
    } 
    else { 
    throw new TypeError(`Unexpected type ${ typeof pathOrMapFn } in select operator,` 
     + ` expected 'string' or 'function'`); 
    } 
    return distinctUntilChanged.call(mapped$); 
} 

あなたは文字列を渡すとpluckに同等であることがわかりますが、セレクタ機能を渡すとmapに相当します - タイプセーフです。

セレクタ関数を渡します。それはexample appで行われていることです。

counter: Observable<number>; 
constructor(private store: Store<AppState>){ 
    this.counter = store.select(state => state.counter); 
} 
+0

賞賛jebus /クモの豚:あなたの例を使用して

!私は非常に私のプロジェクトに魔法の文字列を導入することについて心配していた –

関連する問題