首页 > 解决方案 > 输入 withlatestFrom

问题描述

我有以下选择器

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

我怎样才能让它正常工作?

标签: reduxrxjsngrx

解决方案


我不明白为什么 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]) => {})
 )

推荐阅读