Babel 获取索引 N 处的数组元素
Babel get array element at index N
我正在重建一个程序的 AST,我的条件之一是在索引 N 处获取给定数组的元素。为了了解我应该如何构建它,我像往常一样去了 AST Explorer 并了解了它是如何实现的语句是构建:
arr[0];
输出为:
{
"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]
得到这个输出(来自 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
。
我正在重建一个程序的 AST,我的条件之一是在索引 N 处获取给定数组的元素。为了了解我应该如何构建它,我像往常一样去了 AST Explorer 并了解了它是如何实现的语句是构建:
arr[0];
输出为:
{
"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]
得到这个输出(来自 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
。