繁体   English   中英

Babel 获取索引 N 处的数组元素

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM