ngrx路由器在RouterNavigationAction有效负载上存储错误类型

时间:2018-01-06 14:38:57

标签: angular ngrx

我开始使用ngrx 4路由器存储,我有一种方法来获得效果中的路由器状态。我也按照他们的建议注册了一个自定义序列化程序。这是我的帮助方法,其中RouterStateUrl是我在路由器reducer状态下注册的类型:

export const firstSegment = (r: RouterNavigationAction): RouterStateUrl => {
  return <RouterStateUrl>r.payload.routerState;
};

问题是编译器抱怨类型RouterStateSnapshot无法转换为RouterStateUrl。在运行时,有效负载实际上是RouterStateURl,但我总是在构建时得到该错误。这就是我注册我的州的方式:

export interface ApplicationState {
  app: App;
  routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
  uiState: UiState;
}

如果导航到fromRouter.RouterReducerState,您可以看到它将泛型类型默认为RouterStateSnapshot。编译器似乎不知道我传入了我自己的类型。有办法解决这个问题吗?

更新 通过将类型从RouterNavigationAction更改为any,我能够解决编译错误,但我讨厌这样做。因此,任何建议输入它并让它编译将不胜感激。

2 个答案:

答案 0 :(得分:0)

RouterNavigationAction默认为RouterStateSnapshot

export type RouterNavigationAction<T = RouterStateSnapshot> = {
  type: typeof ROUTER_NAVIGATION;
  payload: RouterNavigationPayload<T>;
};
     

https://github.com/ngrx/platform/blob/master/modules/router-store/src/router_store_module.ts#L36

尝试使用:

export const firstSegment = (r: RouterNavigationAction<RouterStateUrl>): RouterStateUrl => {
  return r.payload.routerState;
};

答案 1 :(得分:0)

对于其他受此困扰的人,下面是一个完整的ngrx路由器效果的常规示例,没有有效载荷类型错误。这是基于this response到ngrx GitHub存储库上的类似查询,但是我相信适用DTing概述的相同原理:

onEdit(e)