首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript,单元测试:用于从redux-mock-store中使用store.dispatch调度Thunk的正确类型

Typescript,单元测试:用于从redux-mock-store中使用store.dispatch调度Thunk的正确类型
EN

Stack Overflow用户
提问于 2018-10-04 21:54:53
回答 3查看 5.3K关注 0票数 9

有没有办法从使用redux-mock-store创建的存储中正确地分派一个Thunk?现在,我被迫使用任何类型断言

代码语言:javascript
复制
store.dispatch<any>(getCommissions());

因为dispatch期望提供简单的操作

代码语言:javascript
复制
[ts]
Argument of type '(dispatch: ThunkDispatch<IRootState, undefined, 
AnyAction>, getState: () => IRootState) => void' is not assignable to parameter of type 'AnyAction'.
Property 'type' is missing in type '(dispatch: ThunkDispatch<IRootState, undefined, AnyAction>, getState: () => IRootState) => void'.

getCommisions()的代码片段

代码语言:javascript
复制
export function getCommissions() {
  return (dispatch: ThunkDispatch<IRootState, undefined, AnyAction>, getState: () => IRootState) => { ... }
EN

回答 3

Stack Overflow用户

发布于 2018-10-26 22:37:31

createMockStore函数是redux-mock-store的默认导出,它接受泛型类型<S, DispatchExts>,其中S是Redux状态的定义,DispatchExts是任何添加的Redux中间件的附加Dispatch签名的联合(或单个)。

因此,设置的方法是从redux-thunk导入ThunkDispatch,它接受自己的<State, ExtraArgument, Action>泛型参数,并将其作为DispatchExts参数传递给createMockStore

下面是一个简短的例子:

代码语言:javascript
复制
import { AnyAction } from 'redux'; // Or your own Action definition
import createMockStore from 'redux-mock-store';
import thunk, { ThunkDispatch } from 'redux-thunk';

import { ApplicationState } from '../your/definitions';

type DispatchExts = ThunkDispatch<ApplicationState, void, AnyAction>;

const middleware = [thunk];
const mockStore = createMockStore<ApplicationState, DispatchExts>(middleware);

const store = mockStore();

希望能对你有所帮助!

我的当前版本:redux 4.0.0 redux-thunk 2.3.0 redux-mock-store 1.5.3 typescript 2.9.2

ThunkDispatch定义https://github.com/reduxjs/redux-thunk/blob/master/index.d.ts

createMockStore定义https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/redux-mock-store/index.d.ts

票数 24
EN

Stack Overflow用户

发布于 2019-09-19 13:51:34

对于configureMockStore的使用,这个解决方案几乎与@nickpassarella给出的答案完全相同。

代码语言:javascript
复制
import configureMockStore from 'redux-mock-store';
import thunk, { ThunkDispatch } from 'redux-thunk';
import { MyState, MyActions } from './my-types';

type DispatchExts = ThunkDispatch<MyState, undefined, MyActions>;

const middlewares = [thunk];
const mockStore = configureMockStore<MyState, DispatchExts>(middlewares);

const store = mockStore();

这两个示例都适用于redux 4.0.1 redux-thunk 2.3.0 redux-mock-store 1.5.3typescript 3.5.3

票数 7
EN

Stack Overflow用户

发布于 2019-11-23 07:35:18

在类似的情况下,我发现了一个用Typescript编写的更新的库分支,并且在最新版本的redux (4.0.4)和redux-thunk 2.3.0上工作得更好。

https://github.com/jedmao/redux-mock-store

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52648553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档