TypeScript 错误 - Redux 中间件属性 0

jav*_*oob 0 middleware typescript redux redux-observable redux-toolkit

设置中间件时出现以下错误。使用 Redux observable/Redux 工具包。关于为什么会发生这种情况有任何意见吗?

遵循以下回购协议设置。 https://github.com/beast911/react-redux-observables-typescript

import systemReducer, {
  getInfoStart,
  getInfoSuccess,
  getInfoFailed,
  addInfoStart,
  addInfoSuccess,
  addInfoFailed,
  editInfoStart,
  editInfoSuccess,
  editInfoFailed,
  deleteInfoStart,
  deleteInfoSuccess,
  deleteInfoFailed,
  completeInfoStart,
  completeInfoSuccess,
  completeInfoFailed,
} from "./system/slice";

import {
  combineReducers,
  configureStore,
  getDefaultMiddleware,
} from "@reduxjs/toolkit";
import { createBrowserHistory } from "history";
import { combineEpics, createEpicMiddleware } from "redux-observable";
import {
  getInfoEpic,
  addInfoEpic,
  completeInfoEpic,
  deleteInfoEpic,
  editInfoEpic,
} from "./system/epics";
import { ActionType } from "typesafe-actions";
import {
  connectRouter,
  routerMiddleware,
  RouterState,
} from "connected-react-router";

type SystemActionsWithPayload =
  | typeof getInfoStart
  | typeof getInfoSuccess
  | typeof getInfoFailed
  | typeof addInfoStart
  | typeof addInfoSuccess
  | typeof addInfoFailed
  | typeof editInfoStart
  | typeof editInfoSuccess
  | typeof editInfoFailed
  | typeof deleteInfoStart
  | typeof deleteInfoSuccess
  | typeof deleteInfoFailed
  | typeof completeInfoStart
  | typeof completeInfoSuccess
  | typeof completeInfoFailed;

type SystemActions = ActionType<SystemActionsWithPayload>;

type finalActions = SystemActions;

const epics = combineEpics(
  getInfoEpic,
  addInfoEpic,
  completeInfoEpic,
  deleteInfoEpic,
  editInfoEpic
);

export const history = createBrowserHistory<RouterState>();
export const rootReducer = combineReducers({
  router: connectRouter(history),
  system: systemReducer,
});
export type RootState = ReturnType<typeof rootReducer>;
const epicMiddleware = createEpicMiddleware<
  finalActions, // input actions
  finalActions, // output actions
  RootState
>();

function configureAppStore(initialState?: any) {
  // configure middlewares
  const middlewares = [routerMiddleware(history), epicMiddleware];
  // create store
  return configureStore<RootState>({
    reducer: rootReducer,
    middleware: middlewares,
    preloadedState: initialState,
  });
}

export const store = configureAppStore();
epicMiddleware.run(epics);

Run Code Online (Sandbox Code Playgroud)

类型“Middleware<{}, any, Dispatch>[]”不可分配给类型“[ThunkMiddleware<CombinedState<{ router: RouterState<RouterState>;” 系统:任务状态;}>, AnyAction, null> | ThunkMiddleware<...>] | ((getDefaultMiddleware: CurriedGetDefaultMiddleware<...>) => [...]) | 不明确的'。类型“Middleware<{}, any, Dispatch>[]”中缺少属性“0”,但类型“[ThunkMiddleware<CombinedState<{ router: RouterState<RouterState>;”中需要属性“0” 系统:任务状态;}>, AnyAction, null> | ThunkMiddleware<...>]'

phr*_*hry 6

大多数 Redux Toolkit api 不应使用手动指定的泛型来调用。

通过调用,return configureStore<RootState>(...您实际上会从商店中删除有关中间件的所有信息。跳过泛型,只需调用return configureStore(...并让 TypeScript 从使用中推断出正确的类型。