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

如何在React Query中为onSuccess的返回数据添加类型?

问题解决:Axios响应类型与useMutation回调的类型不匹配

错误原因

你定义的IRegisterResponse是Axios响应中data字段的类型,但httpClient.post<IRegisterResponse>返回的是整个AxiosResponse对象,结构为{ data: IRegisterResponse, status: number, ... }。useMutation的onSuccess回调接收的参数是这个完整的AxiosResponse对象,直接解构accessToken自然会提示属性不存在。

两种解决方式

方式一:让register函数直接返回响应数据

修改register函数,从AxiosResponse中提取data返回,使返回类型匹配你期望的IRegisterResponse:

interface IRegisterResponse {
  accessToken: string;
}

export const register = async ({
  name,
  password,
  token,
}: IRegisterParams): Promise<IRegisterResponse> => {
  const response = await httpClient.post<IRegisterResponse>('register', {
    name,
    password,
    token,
  });
  return response.data; // 仅返回data字段
};

此时useMutation的onSuccess参数就是IRegisterResponse,解构accessToken完全正常:

const { mutate: registerMutation } = useMutation(
  ['register'],
  register,
  {
    onSuccess: ({ accessToken }) => console.log(accessToken),
  }
);

方式二:在onSuccess中正确访问AxiosResponse的data字段

如果不想修改register函数,直接在回调中通过response.data层级获取数据:

const { mutate: registerMutation } = useMutation(
  ['register'],
  register,
  {
    // 直接访问data下的accessToken
    onSuccess: (response) => console.log(response.data.accessToken),
    // 或者通过嵌套解构简化
    // onSuccess: ({ data: { accessToken } }) => console.log(accessToken),
  }
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:40:25