You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTK Query如何排除error中的SerializedError并为单个查询声明错误类型

类型报错原因

默认情况下RTK Query返回的error是 FetchBaseQueryError | SerializedError | undefined 联合类型,其中SerializedError是JS原生错误序列化后的类型,没有status、data等接口响应错误属性,直接访问会触发TS类型校验失败。

方案1:排除SerializedError类型,访问FetchBaseQueryError属性

RTK Query内置了isFetchBaseQueryError类型守卫函数,调用后TS会自动将error类型收窄为FetchBaseQueryError,即可正常访问对应属性,修改后的代码如下:

import { isFetchBaseQueryError } from '@reduxjs/toolkit/query/react'

function PostsList() {
  const { data, error } = useGetPostsQuery()

  return (
    <div>
      {error && isFetchBaseQueryError(error) && (
        <>{error.status} {JSON.stringify(error.data)}</>
      )}
    </div>
  )
}
方案2:单个查询自定义错误类型声明示例

如果需要给单个查询指定固定结构的错误类型,可以在定义endpoint时通过transformErrorResponse配置实现,示例如下:

import { createApi, fetchBaseQuery, FetchBaseQueryError } from '@reduxjs/toolkit/query/react'

// 自定义业务错误结构
interface PostApiError {
  code: number
  message: string
  requestId: string
}

export const postApi = createApi({
  reducerPath: 'postApi',
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (builder) => ({
    getPosts: builder.query<Post[], void>({
      query: () => '/posts',
      // 转换错误响应并指定类型
      transformErrorResponse: (res: FetchBaseQueryError) => {
        return res.data as PostApiError
      }
    })
  })
})

export const { useGetPostsQuery } = postApi

配置完成后,调用useGetPostsQuery返回的error类型会自动变为 PostApiError | SerializedError | undefined,配合类型守卫即可直接访问自定义的错误字段。

内容的提问来源于stack exchange,提问作者Gary B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:24:03