Как аннотировать динамически загружаемые модули в TypeScript с помощью async / await? - PullRequest
0 голосов
/ 27 мая 2019

Во-первых, чтобы избежать ошибок компиляции TypeScript, позвольте мне показать пример динамической загрузки в JavaScript.

_LoadedOnDemandModule.js

const DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE_BY_DEFAULT = 'I was dynamically loaded from JS module by default!';
export default DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE_BY_DEFAULT;

export const DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE = 'I was dynamically loaded from JS module!';

index.js

loadDataOnDemand();

async function loadDataOnDemand() {
  const MODULE = await import('./_LoadedOnDemandModule');
}

Если попытаться console.log(MODULE), это даст:

enter image description here

Module {default: "I was dynamically loaded from JS module by default!", __esModule: true, Symbol(Symbol.toStringTag): "Module"}
DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE: (...)
default: "I was dynamically loaded from JS module by default!"
Symbol(Symbol.toStringTag): "Module"
__esModule: true
get DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE: ƒ ()
__proto__: Object

Ниже решение для TypeScript работает для меня, но я должен подтвердить от профессионалов, здесь есть некоторые скрытые ошибки на некорректность.

loadDataOnDemand1();

type TestType = {
 default: string;
 DYNAMICALLY_LOADED_CONST_FROM_JS_MODULE: string;
}

async function loadDataOnDemand1(): Promise<void> {
 const MODULE: TestType = await import('./_LoadedOnDemandModule');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...