angular - BaseRouterStoreState 缺少“ActionReducerMap”类型的属性'
问题描述
我不断收到以下错误:
错误:(11, 18) TS2739: Type '{ router: (state: RouterReducerState, action: Action) => RouterReducerState; }' 缺少“ActionReducerMap”类型的以下属性:用户,错误
我看过这样的例子:https ://github.com/starjumper30/toh-ngrx8/blob/3a8d61d8423af8543de8a30aed16ee941ffcea0b/src/app/reducers/index.ts似乎以类似的方式设置并且工作正常。
这是我的代码:
import { Action, ActionReducer, ActionReducerMap, MetaReducer } from '@ngrx/store';
import { State } from '../modules/auth/auth.reducer';
import { environment } from '../../environments/environment';
import * as fromRouter from "@ngrx/router-store";
import { InjectionToken } from '@angular/core';
export interface State {
router: fromRouter.RouterReducerState<any>;
}
export const ROOT_REDUCERS = new InjectionToken<ActionReducerMap<State, Action>>('Root reducers token', {
factory: () => ({
router: fromRouter.routerReducer
})
});
export function logger(reducer: ActionReducer<State>): ActionReducer<State> {
return (state: State, action: any): any => {
const result = reducer(state, action);
console.groupCollapsed(action.type);
console.log('prev state', state);
console.log('action', action);
console.log('next state', result);
console.groupEnd();
return result;
};
}
export const metaReducers: MetaReducer<State>[] = !environment.production
? [logger]
: [];
此错误的原因是什么,我该如何解决?
解决方案
我认为你在这一行有错误
import { State } from '../modules/auth/auth.reducer';
所以你可以删除它,因为你的文件中已经定义了一个 State 接口状态
我也在这里不使用State
return (state: State, action: any): any => { // remove State here
我的完整工作代码将是这样的
import {
ActionReducer,
ActionReducerMap,
MetaReducer,
Action
} from "@ngrx/store";
import { environment } from "../../../environments/environment";
import * as fromRouter from "@ngrx/router-store";
import { InjectionToken } from "@angular/core";
export interface State {
router: fromRouter.RouterReducerState<any>;
}
export const ROOT_REDUCERS = new InjectionToken<
ActionReducerMap<State, Action>
>("Root reducers token", {
factory: () => ({
router: fromRouter.routerReducer
})
});
export function logger(reducer: ActionReducer<State>): ActionReducer<State> {
return (state, action) => {
const result = reducer(state, action);
console.groupCollapsed(action.type);
console.log("prev state", state);
console.log("action", action);
console.log("next state", result);
console.groupEnd();
return result;
};
}
export const metaReducers: MetaReducer<State>[] = !environment.production
? [logger]
: [];
推荐阅读
- prometheus-alertmanager - alertmanager 配置中的多个匹配子句?
- angular - 尝试添加自动映射器的 Visual Studio 角度模板
- flutter - 颤振/飞镖抽象类中的工厂方法
- javascript - 有条件地将数据包装在与 vue 的链接中
- c++ - 单独地,std::getline() 工作正常,但如果事先有输入,则输出行为异常
- autofill - xlwings 和自动填充脚本
- tableau-api - 计算字段影响 Tableau 中的总计
- iis - KB5005043 影响解密 web.config?
- c# - C# VSIX 模板:尝试使用自定义向导会导致程序集引用错误
- kubernetes - 在 minikube 中从 yaml 文件创建部署