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

TypeScript联合类型访问属性报Property does not exist如何解决?

问题原因

TypeScript 仅允许访问联合类型所有成员共有的属性,IceBox 不存在 desc 属性,因此直接书写 UnionBox['desc'] 会抛出类型错误。

解决方法

使用分布式条件类型遍历联合类型的每个成员,针对单个成员判断是否存在 desc 属性,返回对应类型:

// 通用类型工具:传入联合类型,有desc取desc,无desc取name
type DescOrName<T> = T extends { desc: unknown } ? T['desc'] : T['name']

interface FruitBox {
  name: string
  desc: {
   'orange': number;
   'banana': number;
  }
}

interface IceBox {
  name: string
}

interface Vegabox {
  name: string
  desc: {
   'tomato': number;
   'potato': number;
  }
}

type UnionBox = FruitBox | Vegabox | IceBox;

// 最终Ship类型定义
type Ship = Record<string, (description: DescOrName<UnionBox>) => void>;

类型验证

最终 DescOrName<UnionBox> 推导结果为:

| { orange: number; banana: number }
| { tomato: number; potato: number }
| string

完全匹配需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:09:05