为何嵌套字典中无法内联计算属性值?单独赋值却可行?
问题原因解析
这是由JavaScript对象字面量的属性名语法规则导致的:
直接写在冒号前的属性名如果是标识符形式,必须符合JavaScript标识符的命名规则——不能包含
.、!、?.这类符号,也不能是动态表达式。你第一段代码里的config.networks!.testnet?.chainId!是一个带可选链、非空断言的表达式,不符合标识符规则,所以触发语法错误。当你把表达式结果赋值给变量
chainId后,chainId是合法的标识符,ES6及之后的JavaScript支持对象属性的简写语法({ chainId }等价于{ chainId: chainId }),所以这段代码能正常运行。
另外还有一种更直接的解决方式,不用单独赋值变量,而是用计算属性名语法,把表达式放在方括号[]里,这样JavaScript会先计算表达式的结果,再把它作为属性名:
const appConfig = { [config.networks!.testnet?.chainId!]: { "token1": "mytoken" } };
内容的提问来源于stack exchange,提问作者siamii
相关产品推荐
相关产品推荐

