Как импортировать экспортируемую функцию модуля асинхронно с динамическим импортом и вызвать ее?

в асинхронной функции обратного вызова обещания

promise.then(async callbackResultValue => { //here })

Я пытался

const browserd = await import('browser-detect');
if (typeof browserd === 'function') { 
    const browserinfo = browserd();
}

получил:

[ts] Невозможно вызвать выражение, тип которого не имеет сигнатуры вызова. Тип "никогда" не имеет совместимых сигнатур вызовов.

потом я попробовал:

const browserd:Function = await import('browser-detect');

получил:

[ts] Тип 'typeof import ("_ 4_' не может быть назначен типу 'Function'. Свойство 'apply' отсутствует в типе 'typeof import (" _ 5_'.


person Wis    schedule 02.06.2018    source источник
comment
Какая цель использовать это?   -  person OPV    schedule 03.06.2018
comment
@OPV мой текущий вариант использования - условная загрузка модуля, который использует / зависит от API, не поддерживаемых во всех целевых средах выполнения.   -  person Wis    schedule 03.06.2018


Ответы (1)


Я просто боролся с тем же самым и пришел к выводу, что объект в возвращенном обещании может быть не самой функцией, а объектом со свойством с именем default, значением которого является функция, которую вы хотите.

Пока я это пишу, я до сих пор не до конца понимаю все нюансы экспорта, но этот код у меня сработал:

    import('moduleWithADefaultExportOfAFunction')
        .then(theImport => theImport.default());
person Sorensen    schedule 12.01.2019