ES6 Динамический импорт ссылок

#javascript #ecmascript-6

Вопрос:

Допустим, я импортирую несколько объектов, у которых один и тот же метод. Как я могу динамически ссылаться на них, скажем, по строкам.

Например,

 import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';

const things = ['Foo', 'Bar', 'Baz'];

things.forEach(thing => {
  thing.doSomething();
});
 

Комментарии:

1. Почему бы просто не выразить их как const things = [Foo, Bar, Baz] и не назвать метод таким образом…? Почему вы выразили их здесь в виде строк?

2. Обязательно ли это должны быть струны?

3. Да, для моих целей должны быть веревочки

4. @charleszardo Почему? Можете ли вы подробнее рассказать о своем примере использования? Вы уверены, что это не проблема XY?

Ответ №1:

Если это должны быть строки, вы можете сделать это:

 import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';

const things = {
'Foo': Foo, 'Bar': Bar, 'Baz': Baz
};

Object.keys(things).forEach(key => {
  things[key].doSomething();
});
 

Если это не обязательно должны быть строки, вы можете просто создать массив импортированных объектов

 import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';

const things = [Foo, Bar, Baz];

things.forEach(thing => {
 thing.doSomething();
});
 

Комментарии:

1. Да, я думаю, мне следует согласиться с твоей первой рекомендацией. Я надеялся, что есть более простой способ сделать это без необходимости писать какое-то подобное отображение, но, возможно, его нет.

Ответ №2:

Просто не используйте строку , используйте так, как вы импортировали, вот так:

 import { Foo } from 'path/to/foo';
import { Bar } from 'path/to/bar';
import { Baz } from 'path/to/baz';

const things = [Foo, Bar, Baz];

things.forEach(thing => {
 thing.doSomething();
});
 

Комментарии:

1. Проблема в том, что в моем случае это должны быть струны.