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

Typescript可辨识联合类型收窄失效,访问属性报错问题排查

问题原因

你提前对函数返回的联合类型对象做了结构拆分,把isReady和data拆成了两个独立的变量。TypeScript 的类型收窄逻辑无法对两个无关联的独立变量做类型绑定,你判断isReady === 'yes'的逻辑,只能收窄isReady本身的类型,不会同步关联到data的类型,所以data在分支里还是被识别为联合类型{ a: number } | false,自然找不到a属性。

解决方案

方案1:不提前解构,直接用返回对象做判断

直接基于完整的返回对象做判别字段校验,TypeScript 可以正常识别联合类型的分支:

const res = myFunction()
if (res.isReady === 'yes') {
  const { a } = res.data; // 不会报错,此时res.data类型被正常收窄为{ a: number }
}

方案2:自定义类型守卫(适合需要提前解构的场景)

如果一定要提前解构,可以写类型守卫函数明确关联两个变量的类型关系:

function isReadySuccess(isReady: Return['isReady'], data: Return['data']): data is {a: number} {
  return isReady === 'yes'
}

const { isReady, data } = myFunction()
if (isReadySuccess(isReady, data)) {
  const { a } = data; // 类型正常收窄,无报错
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:12:03