Javascript可选链接不适用于模板文本
我正在尝试使用可选链接应用模板文字Javascript可选链接不适用于模板文本,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在尝试使用可选链接应用模板文字 type Item = { itemId:number, price: number}; type ItemType = { A:Item, B:Item }; const data : ItemType = { A:{itemId:1, price:2}, B:{itemId:2, price:3} }; let Itemid = `data?.${variable}?.itemId` 其中变量是值为a或B的字符串。 我不确定是否同时支持
type Item = {
itemId:number,
price: number};
type ItemType = {
A:Item,
B:Item
};
const data : ItemType = {
A:{itemId:1, price:2},
B:{itemId:2, price:3}
};
let Itemid = `data?.${variable}?.itemId`
其中变量是值为a或B的字符串。
我不确定是否同时支持可选链接和模板文本。任何线索都是感激的
编辑:
当尝试使用数据?[变量]?.itemId
时,我收到“字符串不能用于索引类型项”。我现在已使用类型更新
编辑:
删除变量类型有助于解决上述错误消息。只需将变量包装在
[
和]
中,如:数据?[variable]?.itemId
(它被称为计算属性名
,是es6
功能。)
完整代码:
let data = {
A:{itemId:1, price:2},
B:{itemId:2, price:3}
}
let variable = 'A'
let Itemid = data?.[variable]?.itemId
更多:
字符串文本的输出是一个字符串,因此您可以使用eval(`data?${variable}?.itemId`)
来计算它的值。(请注意,使用eval
是一种不好的做法。)
但是,在您的情况下,不需要使用模板文本。只需如上所述使用
[]
。在模板中,唯一被视为表达式的内容是${}
,因此在您的情况下,可选的链指示器是字符串的一部分,而不是将插入字符串的表达式的一部分
使用对象键进行可选链接的语法是
data?['string']?.itemId
,或者如果键存储在变量data?[variable]?.itemId
,在模板文本中有一个模板文本,这是行不通的。我认为没有一种有意义的方法让模板文本执行OP想要的操作。