TypeScript 3.7可选链运算符动态属性访问报错问题咨询
关于TypeScript可选链动态属性访问的语法问题解答
嗨,我来帮你理清这个问题!
首先,你遇到的error TS1005: ':' expected错误,根源是可选链运算符的语法写错了。你写的a?[b]?.c里,?和[分开的写法是不合法的——TypeScript会把a?当成三元表达式的开头(比如condition ? trueVal : falseVal),所以它会期待后面出现冒号:,这就导致了语法报错。
正确的写法
这个需求完全是可行的,只要把动态属性访问的部分改成?.[b]就可以了,也就是:
const value = a?.[b]?.c;
这样写的逻辑和你预期的一致:
- 如果
a是null或undefined,直接返回undefined - 如果
a存在,就用动态属性名b访问a[b] - 如果
a[b]是null或undefined,同样返回undefined,否则访问它的c属性
举个实际的例子验证:
const propName = "user"; const data = { user: { name: "Alice" } }; const invalidData = null; console.log(data?.[propName]?.name); // 输出 "Alice" console.log(invalidData?.[propName]?.name); // 输出 undefined,不会报错
关于提案的误解
你提到的相关提案里,其实明确支持动态属性的可选链访问,正确的语法示例就是obj?.[expr],而不是obj?[expr]。之前的错误只是你不小心把?.拆成了?和[,并不是这个需求不可行。
内容的提问来源于stack exchange,提问作者Golo Roden
相关产品推荐
相关产品推荐

