введите тип withlatestFrom - PullRequest
       34

введите тип withlatestFrom

0 голосов
/ 05 июля 2019

У меня есть следующий селектор

export const featureAdapter: EntityAdapter<IRoute> = createEntityAdapter<IRoute>({
  selectId: model => model.routeId,
});

export interface State extends EntityState<IRoute> {
  selectedRouteId: string;
  selectedPointId: string;
}

export const selectAllEntities: (state: object) => Dictionary<IRoute> = featureAdapter.getSelectors(selectRouteState).selectEntities;

export const selectedR: MemoizedSelector<object, string> = createSelector(selectRouteState, getSelectedRoute);

export const selectedRoute: MemoizedSelector<object, IRoute> = createSelector(
      selectAllEntities,
      selectedR,
      (entities, id) => entities[id]
    );

, который возвращает что-то типа IRoute

В моем эффекте я использую последний из

  onAction$ = this.actions$.pipe(
    ofType<featureActions.onAction>(featureActions.ActionTypes.onAction),
    concatMap(action =>
      of(action).pipe(
        withLatestFrom(this.store$.pipe(select(RoutesStoreSelectors.getById(), {routeId: action.payload.routeId}))),
      )
    ),
    switchMap(([action, route]) => {})
 )

внутри

switchMap(([action, route]) 

переменная маршрута, имеет тип any.но он должен быть типа IRoute

как я могу заставить его работать правильно?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Я не понимаю, почему TypeScript не может определить тип, но вы всегда можете явно указать тип.

  onAction$ = this.actions$.pipe(
    ofType<featureActions.onAction>(featureActions.ActionTypes.onAction),
    concatMap(action =>
      of(action).pipe(
        withLatestFrom(this.store$.pipe(select(RoutesStoreSelectors.getById(), {routeId: action.payload.routeId}))),
      )
    ),
    switchMap(([action, route]: [Action, IRoute]) => {})
 )
1 голос
/ 05 июля 2019

Я не уверен, почему вам нужно получить отправленный action в switchMap, но вы можете сделать следующее, чтобы получить route типа IRoute -

onAction$ = this.actions$.pipe(
    ofType<featureActions.onAction>(featureActions.ActionTypes.onAction),
    switchMap(action =>
      combineLatest(of(action), this.store$.pipe(select(RoutesStoreSelectors.getById(), {routeId: action.payload.routeId})))
    ),
    switchMap(([action, route]) => {})
 )

Наличие такого кода гарантирует, что action имеет тип отправляемого действия, а route имеет тип IRoute.

Надеюсь, это поможет.

...