Babel 插件 - 带索引的成员访问

Mr.*_*ges 4 javascript node.js babeljs

我正在写一个 babel 插件。我遇到一个需要使用索引运算符的地方。这是我想要得到的代码a[Symbol.something](b),但是,我似乎找不到办法来做到这一点。我尝试过做这样的事情:

types.callExpression(
    types.memberExpression(types.Identifier('a'), 
        types.memberExpression(types.Identifier('Symbol'), types.Identifier('something'))
    ),
    [types.Identifier('b')]
)
Run Code Online (Sandbox Code Playgroud)

但是,它会抛出错误TypeError: Property property of MemberExpression expected node to be of a type ["Identifier","PrivateName"] but instead g ot "MemberExpression"。我用谷歌搜索了我的问题,但我似乎找不到解决方法。

Sty*_*tyx 5

您应该使用computed的参数MemberExpression

例如,

types.MemberExpression( types.Identifier('foo'), types.Identifier('bar') );
Run Code Online (Sandbox Code Playgroud)

将生成foo.bar,而

types.MemberExpression( types.Identifier('foo'), types.Identifier('bar'), true );
Run Code Online (Sandbox Code Playgroud)

将生成foo[bar].

因此,您的代码应该是:

types.CallExpression(
  types.MemberExpression(
    types.Identifier('a'),
    types.MemberExpression(types.Identifier('Symbol'), types.Identifier('something')),
    true
  ),
  [types.Identifier('b')]
);
Run Code Online (Sandbox Code Playgroud)

这将生成a[Symbol.something](b).