调度仍然期待操作,即使安装了 redux-thunk



我正在尝试在基于 TypeScript 的 React Native 项目中使用 redux-thunk。我的操作定义为

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
  • Redux-thunk: 2.3.0

这个问题已经在 github 上提出

总而言之,您需要添加以下类型:

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

下面的原始答案

这里的问题是dispatch采用一种具有属性typeAction<T>类型,但您正在向其发送函数,而函数没有类型。请注意,setRepeat 是一个返回另一个函数的函数。

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

我需要查看更多您的代码,但似乎您以错误的方式处理这个问题。

相关内容

  • 没有找到相关文章

最新更新