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
相关产品推荐
相关产品推荐

