Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript可选链接不适用于模板文本_Javascript_Reactjs_Typescript - Fatal编程技术网

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想要的操作。