首页 > 解决方案 > TypeScript 中的 CombineReducers

问题描述

export const rootReducer = combineReducers({
    login: loginReducer,
});

这很好,但是一旦我尝试组合另一个减速器,

export const rootReducer = combineReducers({
    login: loginReducer,
    logout: logoutReducer
});

我开始在 rootReducer 上收到错误消息

'rootReducer' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

我怎么能修改这个?

这就是我的 logoutReducer 的样子:

import {store} from '../index'

export const logoutReducer = (state = store.getState(), { type, payload } :any) => {
  switch (type) {
    case "logout":
      return {...state, token: payload};
    default:
      return state;
  }
};

标签: javascriptreactjstypescriptreduxreact-redux

解决方案


您是否尝试过将类型分配给底层减速器?

例如:

import {Action, Reducer} from 'redux';
interface LoginState {
   isLoggedIn: boolean;
   token: string;
}

interface LogoutState { 
   token:string;
}

export const logOutReducer: Reducer<LogoutState> = (state: LogoutState | undefined, incomingAction: Action): LogoutState=> {
switch (incomingAction.type) {
    case "logout":
      return {...state, token: payload};
    default:
      return state;
  }
}
//... export const logInReducer: Reducer<LoginState>...

推荐阅读