Redux Persist + Redux 工具包 $CombinedState 错误

2023-12-21

我正在尝试将 redux persist 添加到 redux 工具包,但由于某种原因我得到了一个Exported variable 'store' has or is using name '$CombinedState' from external module ".../node_modules/redux/index" but cannot be named.vscode 出错。

这是我的商店配置文件,添加了持久配置,如果我删除它,工作正常。

import { configureStore } from "@reduxjs/toolkit";
import { persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
import { createEpicMiddleware } from "redux-observable";
import rootEpic from "onsite/redux/rootEpic";
import rootReducer from "onsite/redux/rootReducer";

const epicMiddleware = createEpicMiddleware();

const persistConfig = {
  key: "root",
  storage: storage,
};

const persistedReducer = persistReducer(persistConfig, rootReducer);

// Line that shows error
const store = configureStore({
  reducer: persistedReducer,
  middleware: [epicMiddleware],
});

export default store;

epicMiddleware.run(rootEpic);

我尝试过的其他事情是将combineReducers声明(来自rootReducerimport) 到同一个文件或将文件转换为纯 JavaScript,具有相同或相似的结果。由于某种原因,打字稿决定仍然在 javascript 文件上困扰我:)

代码仍然在运行,所以我很想就这样保留它,但我想摆脱它。


我遇到了同样的问题,这就是我的发现:

您需要包括Store来自 redux,并将其用作您自己的类型定义store返回值。简短回答:

import { Store } from 'redux';
[...]
const store:Store = configureStore([...])
[...]
export default store;

更长的答案:

据我了解,发生的事情是Store类型用途$CombinedState作为其定义的一部分。什么时候configureStore()返回,它继承了State类型。然而自从State没有在您的代码中明确使用,这意味着您的代码包含一个引用的值$CombinedState,尽管它也不存在于代码中的任何地方。然后,当您尝试将其导出到模块之外时,您导出的值的类型在模块中不存在,因此会收到错误。

您可以导入State来自 redux (这又会明确地导致您的代码引入$CombinedState),然后用它来显式定义store被分配的返回值configureStore()。然后您不应该再导出未知的命名类型。

您还可以更具体地说明您的Store类型,因为它是通用的:

const store:Store<RootState>

尽管我不完全确定这是否是循环依赖,因为您的 RootState 取决于 store.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redux Persist + Redux 工具包 $CombinedState 错误 的相关文章

随机推荐