2017-05-16 9 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

칭찬 여부스/거미 돼지! 나는 내 프로젝트에 많은 마법의 끈을 도입하는 것에 대해 매우 걱정했다. –