Redux 工具包,缺少调度 thunk 类型

Posted

技术标签:

【中文标题】Redux 工具包,缺少调度 thunk 类型【英文标题】:Redux toolkit, dispatching thunk type missing 【发布时间】:2021-08-04 11:41:27 【问题描述】:

我正在使用 redux-toolkit,并尝试发送一个 thunk。 我正在使用的调度函数看起来像这样,这是直接取自文档。 eslint 抱怨缺少返回类型,知道它应该是什么吗?

export const useAppDispatch = () => useDispatch<AppDispatch>();

此外,我得到了同样的错误,就像这个问题How to dispatch an Action or a ThunkAction (in TypeScript, with redux-thunk)?一样,但据我了解,那里没有真正的解决方案。

如果我得到这样的代码:

export const fetchSomeThing = createAsyncThunk<SomeType[]>('someThing/fetch', async () => 
  const someClient = useSomeClient();
  const someThing: SomeType[] = await someClient.listSomething();
  return someThing;
);

// I also tried typing dispatch as AppDispatch here explicitly, but it gives me the same error
const dispatch = useAppDispatch();
dispatch(fetchSomeThing()) //This gives an error: Property 'type' is missing in type 'AsyncThunkAction<SomeType[], void, >' 
// but required in type 'AnyAction'.ts(2345), index.d.ts(21, 3): 'type' is declared here.

我的商店是这样的:

export const store = configureStore(
  reducer: 
    someThing: someThingReducer,
  ,
);

// Infer the `RootState` and `AppDispatch` types from the store itself
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch; // According to vs-code this is of type AppDispatch = Dispatch<AnyAction>

【问题讨论】:

【参考方案1】:

当人们以某种​​方式并排安装redux@4.0.5redux@4.1.0 时,最近似乎会发生这种情况,通常可以通过执行npm i @types/react-reduxyarn add @types/react-redux 重新安装@types/react-redux 来解决。你能试试吗?

【讨论】:

啊,这也许可以解释为什么它现在可以在对所有依赖项进行纱线升级后工作,我想这会导致重新安装,将旧的东西剪掉。因为没有更新任何相关的内容 我已经升级了解决方案的包,尝试从我的包文件中添加/删除 react-redux/type 依赖项,但仍然遇到同样的问题。已将 "@types/react-redux": "^7.1.16" 安装为 devDependency。没有任何帮助。我的调度员仍被 Visual Studio 识别为 Dispatch,无法运行我的代码。最后发现它必须与纱线有关。我一直在运行纱线版本 2.4.1 (berry)。一旦我降级回 1.22.10,问题就消失了。知道这是为什么吗? 不,但我很高兴你解决了它。然后使用yarn,可以使用package.json中的resolutions字段来防止重复。你可能想调查一下。 @Aleksas 我在使用 Yarn 2 时遇到了同样的问题。最终对我有用的是明确添加 redux 作为依赖项并确保 @reduxjs/toolkit 是最新的。如果您使用的是工作区,我能够正确输入的唯一方法是将redux 添加到 root。更多细节在这里:github.com/yarnpkg/berry/issues/3150 @JoeKrill 你拯救了我的一天。对我来说,我使用的是 npm v6.14.8,一旦我明确安装 redux 作为依赖项,TypeScript 就不再抱怨了。

以上是关于Redux 工具包,缺少调度 thunk 类型的主要内容,如果未能解决你的问题,请参考以下文章

类型上不存在属性 - redux-thunk 等待调度

redux 工具包查询和创建异步 thunk 有啥区别?

Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象

在 getDefaultMiddlware 配置后 Redux 工具包 thunk 消失

Redux-thunk “调度不是函数”

Redux thunk:等待异步函数调度