диспетчер по-прежнему ожидает действий, даже если установлен redux-thunk? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать redux-thunk в проекте React Native на основе TypeScript.Мои Действия определены как

export type Action<T> = {
  type: T,
  payload?: any
}

Мой магазин определен как

import { applyMiddleware, createStore } from 'redux'
import { persistStore } from 'redux-persist'
import thunk from 'redux-thunk'

import logger from 'src/redux/middleware/logger'
import rootReducer from 'src/redux/reducers'

export const store = createStore(rootReducer, applyMiddleware(logger, thunk))
export const persistor = persistStore(store)

Мой конструктор действий определен как

export const setRepeat = (repeat: Repeating) => (
  dispatch: Dispatch<Action>,
  getState: () => AppState
) =>
  dispatch<Action>({
    payload: repeat,
    type: actionTypes.SET_REPEAT,
  })

Repeating - это простое перечисление:

export enum Repeating {
  All = 'all',
  None = 'none',
  Single = 'single',
}

И когда я пытаюсь отправить это действие с

store.dispatch(setRepeat('all' as Repeating))

, я получаю эту ошибку

TS2345: Property 'type' is missing in type '(dispatch: Dispatch<Action<string>>, getState: () => AppState) => Action<string>' but required in type 'Action<string>'.

Из того, что я могу сказать, это означает, чтоsetRepeat возвращает функцию (что имеет смысл, это то, для чего она определена).Но store.dispatch не ожидает, что такая функция, как позволяет redux-thunk, и все еще ожидает Action.

Я не могу найти никакого объяснения, почему thunk не предоставляет правильные типы здесь, иличто мне нужно сделать, чтобы исправить эту проблему.

  • реактивный: 0.57.7
  • резерв: 4.0.1
  • реакт-избыточ: 6.0.0
  • избыточный гром: 2.3.0

1 Ответ

0 голосов
/ 30 января 2019

Эта проблема была поднята на github

Чтобы подвести итог, вам нужно добавить следующие типы:

const store = createStore(
rootReducer,
applyMiddleware(
    thunk as ThunkMiddleware<IState, Actions>, // this is crucial
));

ОРИГИНАЛЬНЫЙ ОТВЕТ НИЖЕ

Проблема в том, что dispatch принимает тип Action<T>, который имеет свойство type, но вы отправляете ему функцию, а функции не имеют типов.Обратите внимание, что setRepeat - это функция, которая возвращает другую функцию.

store.dispatch(setRepeat('all' as Repeating)(dispatcherInstance,getStateFunction))

Мне нужно было бы увидеть больше вашего кода, но, похоже, вы немного ошиблись в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...