Динамический импорт машинописного текста

С текущей, последней версией TS (v2.5.x) возможно ли динамически импортировать модуль, используя переменную, вместо жесткого кодирования?

Например:

let modName: string = "myModule";
const myMod = await import(modName);

Когда я использую переменную, я получаю сообщение об ошибке «Не удается найти модуль '.'». Похоже, что TS транспилирует его в эту строку кода, когда я использую переменную, поэтому не имеет значения, что я устанавливаю для этой переменной.

Я просмотрел эти соответствующие темы:

Динамический импорт модуля в TypeScript TypeScript ES dynamic `import()`


person Hari    schedule 04.10.2017    source источник
comment
Вы проверили транспилированный код? Как это выглядит? typescriptlang.org/play/   -  person zerkms    schedule 05.10.2017
comment
Это опечатка, что вы объявляете modName, но используете mod в следующей строке?   -  person zerkms    schedule 05.10.2017
comment
Эта функция предназначена для работы в тандеме с вашим загрузчиком. Для этого вам нужен загрузчик модулей.   -  person Aluan Haddad    schedule 05.10.2017
comment
Да, это опечатка @zerkms   -  person Hari    schedule 05.10.2017
comment
Транспилированный код выглядит так: Promise.resolve().then(function(){return!function(){var e=new Error('Cannot find module "."');throw e.code="MODULE_NOT_FOUND",e}()}). Я использую WebPack и Uglify, поэтому код выглядит так. Если я использую жестко закодированную строку: Promise.resolve().then(function(){return o("my-module-name")})   -  person Hari    schedule 05.10.2017
comment
Вы когда-нибудь находили решение для этого или это просто невозможно?   -  person prawn    schedule 25.05.2018
comment
Извините за задержку с ответом. Нет резолюции по этому поводу. Когда вы используете имя переменной, транспилятор понятия не имеет, что вы хотите загрузить. В итоге я поместил машинописный текст в файл и использовал eval для его оценки по требованию.   -  person Hari    schedule 28.06.2018


Ответы (1)


Вы можете использовать eval.

function body(theModule:any){
   // do something with the module
}

var moduleName = 'name-of-your-module';
eval (`import('${moduleName}').then(body)`);
person Bing Ren    schedule 05.06.2021