Как экспортировать Object.freeze по умолчанию в динамический c импорт? - PullRequest
2 голосов
/ 15 марта 2020

Я пытаюсь экспортировать замороженный объект в динамически импортированном модуле, и он не работает.

Мой основной модуль:

import ('./hello.mjs').then(function (o) {
    o.hello();
});

Мой импортированный модуль, hello.m js, имеет следующий код:

function hello () {
    console.log('Hello');
}

export default Object.freeze({ hello });

Программа завершается с ошибкой в ​​консоли:

TypeError: o.hello is not a function at main.mjs:2

Однако, если Я использую простой экспорт, как это:

function hello () {
    console.log('Hello');
}

export { hello };

... тогда он работает. Экспорт замороженных объектов по умолчанию работает с не динамическим импортом модуля c. Почему импорт модуля dynamici c ведет себя по-разному, и что я могу сделать, чтобы это исправить?

1 Ответ

2 голосов
/ 15 марта 2020

Значением выполнения обещания из динамического c импорта является объект * пространства имен модуля для модуля. (См. FinishDynamicImport в спецификации c.) Чтобы получить доступ к экспорту по умолчанию, используйте для него свойство default, возможно, через деструктуризацию:

import ('./hello.mjs').then(function ({default: o}) {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^
    o.hello();
});
...