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

TypeScript中如何直接访问对象数组的嵌套属性?

解决TypeScript联合类型下嵌套可选属性的链式访问问题

直接链式访问是可行的,问题出在你漏写了一个可选链操作符。原代码中age是Dogs和Cats接口中的可选属性(age?: Birthday),所以当你用?.age获取到的是Birthday | undefined,这时候直接访问.placeOfBirth会触发类型错误——因为TypeScript无法确定age一定存在。

只需要在age后面再加一个?.,就能安全访问嵌套的placeOfBirth:

const foo = (index: number, key: AnimalKeys) => {
    const working = myAnmials.allAnimals[key]?[index]?.age?.placeOfBirth;
};

为什么原写法不行?

当key是联合类型"dogs" | "cats"时,myAnmials.allAnimals[key]?[index]的类型是Dogs | Cats | undefined。这两个接口都有可选的age属性,所以?.age的结果是Birthday | undefined。如果没有额外的?.,TypeScript会认为你可能在undefined上访问placeOfBirth,因此报错。

其他可选方案

如果你确定当前场景下age一定存在,也可以用类型断言跳过检查,但这种方式不够安全,不推荐在不确定的场景使用:

const working = (myAnmials.allAnimals[key]?[index] as Dogs | Cats).age!.placeOfBirth;

或者用类型守卫提前收窄类型,这也是你提到的可行方式,但相比补全可选链,代码会更繁琐一些。

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:05:01