Плагины Babel - членский доступ с индексом - PullRequest
0 голосов
/ 15 февраля 2019

Я пишу плагин Babel.Я наткнулся на место, где мне нужно использовать оператор индекса.Это код, который я хочу получить a[Symbol.something](b), однако я не могу найти способ сделать это.Я попытался сделать что-то вроде этого:

types.callExpression(
    types.memberExpression(types.Identifier('a'), 
        types.memberExpression(types.Identifier('Symbol'), types.Identifier('something'))
    ),
    [types.Identifier('b')]
)

Однако, он выдает ошибку TypeError: Property property of MemberExpression expected node to be of a type ["Identifier","PrivateName"] but instead g ot "MemberExpression".Я погуглил свою проблему, но я не могу найти способ сделать это.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы должны использовать computed параметр MemberExpression.

Например,

types.MemberExpression( types.Identifier('foo'), types.Identifier('bar') );

сгенерирует foo.bar, тогда как

types.MemberExpression( types.Identifier('foo'), types.Identifier('bar'), true );

сгенерирует foo[bar].

Таким образом, ваш код должен быть:

types.CallExpression(
  types.MemberExpression(
    types.Identifier('a'),
    types.MemberExpression(types.Identifier('Symbol'), types.Identifier('something')),
    true
  ),
  [types.Identifier('b')]
);

Это сгенерирует a[Symbol.something](b).

...