You need to enable JavaScript to run this app. 为何TypeScript无法正确推断显式声明的返回对象联合类型的取值
优惠活动
大模型
产品
解决方案
定价
更多

为何TypeScript无法正确推断显式声明的返回对象联合类型的取值

问题原因

该问题是TypeScript现有类型系统的设计限制:类型收缩逻辑无法跟踪多个独立变量之间的类型关联。
当你将联合类型的返回值直接解构为loading、data两个独立变量后,两者的类型会被分别推导为true | false、Data | null,完全失去了原本属于同一个联合类型成员的绑定关系。TypeScript不会额外存储两个变量之间的依赖规则,因此单独判断loading的值无法触发data的类型缩小。

解决方案

方案1:先判断对象属性,再解构

最简单的兼容写法是先保留完整的返回值对象,判断loading属性后再按需解构,此时TypeScript可以正常识别联合类型的属性关联,自动缩小类型:

const requestRes = sendRequest(true);
if (requestRes.loading) {
  const { data } = requestRes;
  // 此时data类型被正确缩小为 null
} else {
  const { data } = requestRes;
  // 此时data类型被正确缩小为 Data
}

方案2:封装自定义类型守卫

如果需要在多处判断该返回值类型,可以封装自定义类型守卫复用判断逻辑:

// 类型守卫函数,显式告诉TypeScript判断规则
function isLoading(res: ReturnType): res is { loading: true; data: null } {
  return res.loading;
}

const requestRes = sendRequest(true);
if (isLoading(requestRes)) {
  requestRes.data; // 类型自动推断为 null
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:18:01