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 个允许的选项是 IdentifierPrivateName