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

Redux Toolkit Query中成功Mutation请求的数据为何可能为undefined?

关于RTK Query useLoginMutation中isSuccess为true时data仍标注为undefined的问题

原因

Redux Toolkit Query的类型系统里,isSuccess和data的状态是独立维护的,TypeScript无法自动推断二者的依赖关系——哪怕isSuccess为true,类型检查器也没法确定data一定存在,因此会保留undefined的类型标注。

解决方案

方案1:使用非空断言(安全场景)

既然isSuccess为true时data必然存在,可通过非空断言!告知TypeScript此处data不会是undefined:

if (isSuccess) {
  localStorage.setItem('token', data!.accessToken)
}

方案2:添加存在性检查

如果不想用非空断言,可手动添加data的存在性判断,让TypeScript自动收窄类型:

if (isSuccess && data) {
  localStorage.setItem('token', data.accessToken)
}

方案3:用unwrap()处理异步结果

调用mutation时,使用unwrap()直接获取成功响应的数据,此时返回值类型就是IAuthResponse,无需处理undefined:

const onSubmit = async (loginData: ILoginData) => {
  try {
    const authResponse = await login(loginData).unwrap()
    localStorage.setItem('token', authResponse.accessToken)
  } catch (error) {
    // 处理登录失败逻辑
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:04:59