我开始使用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,我能够解决编译错误,但我讨厌这样做。因此,任何建议输入它并让它编译将不胜感激。
答案 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)