TypeScript联合类型数组元素无法访问对象属性该如何解决?
TypeScript 联合类型数组元素属性访问报错解决方案
报错本质是你将数组定义为了(string | test)[]的联合类型数组,TS 无法默认推断指定下标的具体类型,以下几种方案都无需额外声明新变量接收元素:
- 直接使用类型断言:手动告诉 TS 目标元素的类型
// 用as关键字直接断言z[1]为test类型 console.log((z[1] as test).id)
- 内联类型收窄:通过属性存在性判断让 TS 自动推导类型,适合不确定下标对应类型的场景
if ('id' in z[1]) { // 进入此分支时TS会自动收窄z[1]的类型为test console.log(z[1].id) }
- 元组类型定义:如果数组长度、每个位置的类型固定,直接将数组定义为元组,从根源避免类型判断
interface test { id:number; details:string; } // 明确数组第0位为string,第1位为test let z : [string, test] = ['hello',{ id:4, details:'heyheyhey' }] console.log(z[1].id) // 无需额外操作,TS自动识别z[1]为test类型
内容的提问来源于stack exchange,提问作者Devon
相关产品推荐
相关产品推荐

