Нужно ли мне когда-либо явно указывать allowSyntheticDefaultImports, если esModuleInterop имеет значение true для настройки переноса TypeScript? - PullRequest
0 голосов
/ 30 сентября 2018

Мне нужно подтверждение по следующей теории.Согласно TS docs , есть два параметра, которые можно установить в tsconfig.json .

  1. -allowSyntheticDefaultImports: Разрешить импорт по умолчанию из модулей без экспорта по умолчанию.Это не влияет на генерацию кода, только на проверку типов.

  2. - esModuleInterop: Emit __importStar и __importDefault помощники для совместимости и поддержки Babel во время выполнения.--allowSyntheticDefaultImports для совместимости типов систем.

Когда я перебираю Google, я вижу, что оба установлены на true (по крайней мере, в отношении поведения I 'м стремлюсь).Однако, насколько я понимаю документы, TS и перенос в JS, нет смысла использовать их оба.

Как я понимаю, я мог бы использовать только последние и полностью удалить первые.Однако, будучи осторожным и скромным, я не совсем уверен и беспокоюсь о том, что делаю что-то менее яркое, не осознавая этого в настоящий момент.

Боюсь, что это что-то неуместное, что укусит меня в ослаПозже он стал причиной нескольких часов скорби и выдергивания волос во время отчаянного устранения неполадок.Основанием для скептицизма является то, что оба варианта доступны, поэтому я делаю вывод, что в четырех случаях требуются все комбинации ( true / false и т. Д.), Но я не могу представить, какие они есть..

Безопасно ли пропускать - allowSyntheticDefaultImports , если - esModuleInterop: true в compilerOptions ?И если да, то почему у нас есть эта опция?

Бонусный вопрос: когда она требуется со всеми четырьмя комбинациями ( true / false ) для этих двух опций?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Хорошо, я понимаю, что allowSyntheticDefaultImports предназначен для возможности загрузки библиотек CommonJS более простым способом, если вы нацелены на es6 + (во время разработки), в то время как esModuleInterop для упрощения этого импорта (во время выполнения), если вы нацеленынапример AMD (как у меня).

В соответствии с документацией вам не нужно явно указывать allowSyntheticDefaultImports, если у вас включен esModuleInterop, но причина, по которой мне пришлось включить также allowSyntheticDefaultImportsв том, что Resharper, кажется, смотрит на этот флаг при выполнении проверки синтаксиса в Visual Studio.Конечно, он все равно работал и работал нормально только с esModuleInterop, но я получил много красных предупреждений от Resharper, пока не включил и другой флаг.

0 голосов
/ 08 октября 2018

Если вы имеете в виду, можете ли вы оставить allowSyntheticDefaultImports неопределенным и определить только esModuleInterop, ответ должен быть ДА, чтобы двигаться вперед, но с этим возникла проблема. PR # 26866 , похоже, исправлено, объединено только 17 сентября, так что в краткосрочной перспективе может возникнуть некоторый риск.

Поскольку оба они существуют, я полагаю, что оба они были частью решения проблем совместимости с импортом модулей, переносимых с помощью Babel, оригинальный PR добавил опцию allowSyntheticDefaultImports к определенным сообщениям времени компиляции, но на практике этого не произошло.адрес поведения во время выполнения импорта.Так что --esModuleInterop был добавлен позже.См. Руководство по TypeScript / # 816 для обсуждения того, как обновить документы ...

...