[英]Babel get array element at index N
我正在重建一个程序的 AST,我所拥有的条件之一是在索引 N 处获取给定数组的元素。为了了解我应该如何构建它,我像往常一样去了AST Explorer并看到了这个语句是如何构建的:
arr[0];
output 是:
{
"type": "MemberExpression",
"start": 0,
"end": 4,
"object": {
"type": "Identifier",
"start": 0,
"end": 1,
"name": "a"
},
"property": {
"type": "Literal",
"start": 2,
"end": 3,
"value": 0,
"raw": "0"
},
"computed": true,
"optional": false
}
由于在 Babel 中我们使用numericLiteral
作为数字字面值,所以我试过这个:
memberExpression(identifier(<myArrayNameAsAString>), numericLiteral(0))
这令人惊讶地引发了错误:
Error: Property property of MemberExpression expected node to be of a type ["Identifier","PrivateName"] but instead got "NumericLiteral"
现在我开始想知道 Babel 最初是如何构建这样一个 AST 的。 所以我给出了这个表达:
arr[0]
得到这个 output(来自 Babel):
MemberExpression: {
{
...,
type: 'Identifier',
name: 'arr'
},
{
...,
type: 'NumericLiteral',
value: 0
}
}
看起来 Babel 能够准确地构建我想要构建的东西,但是当我这样做时它会抛出一个错误。
作为替代方案,我研究了实现此目的的其他方法,例如使用.at 。 但是,该操作尚未被广泛采用,我想避免它。
在调试更深的 Babel 之后,需要computed
的属性为真。 它有一个内部验证器,如下所示:
const normal = (0, _utils.assertNodeType)("Identifier", "PrivateName");
const computed = (0, _utils.assertNodeType)("Expression");
在未设置computed
属性的情况下,仅有 2 个允许的选项是Identifier
和PrivateName
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.