При использовании этого синтаксиса нет, но это возможно при использовании динамического импорта.
https://mariusschulz.com/blog/dynamic-import-expressions-in-typescript имеет несколько хороших примеров и объяснений TypeScript для динамического импорта.
В вашем случае это будет выглядеть примерно так:
const config = import('config').catch((error) => {
// Do something if you get an error
});
Обратите внимание, чтоэто делает загрузку асинхронной, поэтому config
будет обещанием для значения модуля, а не только для самого значения, и остальная часть вашего кода не будет автоматически ждать, пока эта загрузка будет завершена. Вам нужно явно указать await config
, где вы хотите его использовать или аналогичное.
Проблема с обычным синтаксисом импорта заключается в том, что он предназначен для извлечения и выполнения статически, прежде чем фактически выполнить какой-либо код вэтот файл, что означает, что у вас нет места, где вы можете настроить обработку ошибок.
В частности, когда выйдет TypeScript 3.7, вы сможете использовать await верхнего уровня в модулях, так что вы можетепревратить config
в обычное значение модуля, которое последующий код будет автоматически ожидать, как вы и ожидаете, например:
const config = await import('config').catch((error) => {
// Do something if you get an error
});
Есть еще один последний вариант: если вы используете модули commonjs, вы можете отступитьна синхронный require('config')
вызов:
let config: any;
try {
config = require('config');
} catch (e) {
// Do something if you get an error
}
Это будет делать то, что вы ожидаете, но вы потеряете печать (исправимо, но сложно сделать хорошо), и в целом я бы рекомендовал перейти к модулям ES, а неборются с ними, потому что они стандарт.