类型上不存在属性 - redux-thunk等待调度

azi*_*ium 1 typescript redux redux-thunk redux-toolkit

我在这里描述了这个确切的问题https://github.com/reduxjs/redux-toolkit/issues/485#issuecomment-610654378

所以我直接导入了 ThunkDispatch 并使用它。我无法从调度的响应中获取任何密钥而不引发property does not exist错误

@reduxjs/toolkit@1.5.1 
Run Code Online (Sandbox Code Playgroud)
const response = await dispatch(deactivateSubscription(args))
Run Code Online (Sandbox Code Playgroud)
const response: PayloadAction<ApiResponse<EmptyBodyResponse>, string, {
    arg: DeactivateSubscriptionArgs;
    requestId: string;
    requestStatus: "fulfilled";
}, never> | PayloadAction<...>
Run Code Online (Sandbox Code Playgroud)
export interface ApiResponse<T = unknown> {
  body: T
  error: Error
  success: boolean
  message?: string
}
Run Code Online (Sandbox Code Playgroud)
TS2339: Property 'error' does not exist on type 'PayloadAction<ApiResponse<EmptyBodyResponse>, string, { arg: DeactivateSubscriptionArgs; requestId: string; requestStatus: "fulfilled"; }, never> | PayloadAction<...>'.
  Property 'error' does not exist on type 'PayloadAction<ApiResponse<EmptyBodyResponse>, string, { arg: DeactivateSubscriptionArgs; requestId: string; requestStatus: "fulfilled"; }, never>'.
    149 |
  > 150 |                     if (!response.error) {
        |                                   ^^^^^
    151 |                       setIsEditing(false)
    152 |                     }
    153 |                   }}
Run Code Online (Sandbox Code Playgroud)

mar*_*son 5

根据文档createAsyncThunkcreateAsyncThunk不返回实际的“响应” 相反,它返回“已分派的最终操作对象”,以避免代码中出现“未捕获的拒绝 Promise”错误。

您可以解开结果操作以将实际数据返回到组件中。

另外,请确保您使用的Dispatch类型能够正确理解 thunk

  • 当然。请注意,在即将发布的 RTK 版本中,我们将直接在返回的 Promise 上提供“.unwrap()”方法:https://github.com/reduxjs/redux-toolkit/issues/775#issuecomment-801143225 (4认同)