【发布时间】:2020-05-19 19:33:27
【问题描述】:
我已经使用 typescript 设置了一个 redux thunk 函数,如下所示:
export const fetchActivities = (): AppThunk => async dispatch => {
dispatch(fetchActivitiesRequest())
try {
const res = await fetch("/activities")
const body = await res.json()
dispatch(fetchActivitiesSuccess(body))
} catch (err) {
dispatch(fetchActivitiesError(err))
}
}
AppThunk 只是从 ThunkAction 类型派生的类型,具有以下类型参数:
export type AppThunk<ReturnType = void> = ThunkAction<ReturnType, {}, null, Action<string>>
我的问题是,当我尝试为我的操作设置单元测试时,以及当我尝试像这样发送 thunk 操作时:
const middlewares = [thunk]
const mockStore = configureMockStore(middlewares)
const store = mockStore({ activities: [] })
store.dispatch(actions.fetchActivities())
我收到以下错误消息:
Argument of type 'ThunkAction<void, {}, null, Action<string>>' is not assignable to parameter of type 'AnyAction'.
Property 'type' is missing in type 'ThunkAction<void, {}, null, Action<string>>' but required in type 'AnyAction'.ts(2345)
我已尝试四处寻找解决此问题的方法,但没有成功。大多数建议说尝试向泛型添加任何参数以进行调度,因此dispatch<any>(actions.fetchActivities())。虽然这可以阻止输入错误,但只有 thunk 中的第一个操作会被调度,而 try 和 catch 语句中的所有内容都将被忽略。
有人对如何解决此问题有任何建议吗?
【问题讨论】:
标签: typescript redux react-redux redux-thunk