Typescript, модульные тесты: правильная типизация для отправки Thunk с store.dispatch из redux-mock-store - PullRequest
0 голосов
/ 04 октября 2018

Есть ли способ правильно отправить Thunk из магазина, созданного с помощью redux-mock-store?Прямо сейчас я вынужден использовать утверждение любого типа

store.dispatch<any>(getCommissions());

Поскольку dispatch ожидает предоставить простое Действие

[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()

export function getCommissions() {
  return (dispatch: ThunkDispatch<IRootState, undefined, AnyAction>, getState: () => IRootState) => { ... }

1 Ответ

0 голосов
/ 26 октября 2018

Функция createMockStore, которая по умолчанию экспортирует redux-mock-store, принимает универсальные типы <S, DispatchExts>, где S - это определение вашего состояния Redux, а DispatchExts - это объединение (или единственное) дополнительных * 1006.* подписи для любого добавленного промежуточного программного обеспечения Redux.

Таким образом, способ настроить это - импортировать ThunkDispatch из redux-thunk, который принимает свои собственные общие аргументы <State, ExtraArgument, Action> и передает их как DispatchExts аргумент createMockStore.

Вот сокращенный пример:

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

...