gpt4 book ai didi

typescript - 'ThunkAction' 类型的参数不可分配给 'AnyAction' 类型的参数

转载 作者:行者123 更新时间:2023-12-03 09:33:45 25 4
gpt4 key购买 nike

我已经使用 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 中的第一个 Action 会被调度,而 try 和 catch 语句中的所有内容都将被忽略。

有人对如何解决此问题有任何建议吗?

最佳答案

这是两个截然不同的问题。任何方式的输入都不会影响运行时行为。

首先:所以你的 thunk 没有触发任何其他 Action 只能有一个含义:对 dispatch 的其他调用很可能永远不会到达。
您确定要调用fetch吗?曾经终止?它可能只是永远等待答案或类似的东西。

其次,你的打字问题:正常Dispatch默认情况下,type 只是不支持 thunk。您的解决方案 Dispatch<any>没关系。否则,您可以使用 dispatch函数到 ThunkDispatch来自 redux-thunk包裹。

编辑:对不起,这看起来就像 RTK 错误,但它是不同的。
(原始的,可能是错误的答案)

这是 RTK 中的一个已知错误,带有 currently open PR那会解决它 - 因为我现在生病了,所以我没有时间来完成它,但是你可以使用 CI 构建,直到我们推出一个新版本。你可以通过安装它
yarn add https://pkg.csb.dev/reduxjs/redux-toolkit/commit/933aa4a1/@reduxjs/toolkit或者npm i https://pkg.csb.dev/reduxjs/redux-toolkit/commit/933aa4a1/@reduxjs/toolkit

关于typescript - 'ThunkAction' 类型的参数不可分配给 'AnyAction' 类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com