You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用redux-mock-store 1.5.4时从redux-thunk 2迁移到3?

解决redux-thunk 3.x.x与redux-mock-store 1.5.4的TypeScript兼容问题

问题背景

在redux-thunk 2.x.x与redux-mock-store 1.5.4组合下,以下代码可正常运行:

import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';

const mockStore = configureMockStore([thunk]);

但升级redux-thunk至3.x.x后,会触发TypeScript类型错误:

Type 'typeof import("/Users/user/Development/web-client/node_modules/redux-thunk/dist/redux-thunk")' is not assignable to type 'Middleware<{}, any, Dispatch<AnyAction>>'.
  Type 'typeof import("/Users/user/Development/web-client/node_modules/redux-thunk/dist/redux-thunk")' provides no match for the signature '(api: MiddlewareAPI<Dispatch<AnyAction>, any>): (next: Dispatch<AnyAction>) => (action: any) => any'.ts(2322)

根源是redux-thunk v3重构了类型定义,从直接导出中间件实例改为导出创建中间件的工厂函数,而redux-mock-store 1.5.4的类型系统未适配这一变化。

兼容方案

方案1:调用thunk工厂函数生成中间件实例

redux-thunk v3的默认导出是一个工厂函数,需要执行它来得到符合要求的中间件实例。修改代码如下:

import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';

// 执行thunk工厂函数获取中间件
const mockStore = configureMockStore([thunk()]);

如果你的项目使用了thunk的额外参数(extraArgument),可以传入配置对象:

const extraArg = { api: myApiClient };
const mockStore = configureMockStore([thunk({ extraArgument: extraArg })]);

方案2:添加类型断言(可选,用于类型报错仍存在的场景)

如果方案1仍触发类型错误,可以手动添加类型断言强制适配redux-mock-store的类型要求:

import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import type { Middleware, Dispatch, AnyAction } from 'redux';

const thunkMiddleware = thunk() as Middleware<{}, any, Dispatch<AnyAction>>;
const mockStore = configureMockStore([thunkMiddleware]);

注意事项

  • 官方确实不推荐使用mock store测试Redux逻辑,更建议直接测试thunk函数本身或使用Redux Toolkit的configureStore配合真实中间件进行集成测试。但如果当前必须完成包升级,上述方案可临时解决兼容问题。

内容的提问来源于stack exchange,提问作者WillyC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:58:16