Я просматривал чей-то .tsconfigфайл и там заметил--esModuleInterop
Это его .tsconfigфайл
{
"compilerOptions": {
"moduleResolution": "node",
"target": "es6",
"module": "commonjs",
"lib": ["esnext"],
"strict": true,
"sourceMap": true,
"declaration": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declarationDir": "./dist",
"outDir": "./dist",
"typeRoots": ["node_modules/@types"]
},
"include": ["src/**/*.ts"],
"exclude": ["node_modues"]
}
Здесь мой главный вопрос - что такое "esModuleInterop": true,и
"allowSyntheticDefaultImports": true,. Я знаю, что они как бы зависят от "module": "commonjs",. Может ли кто-нибудь попытаться объяснить это наилучшим человеческим языком?
Официальные документы для allowSyntheticDefaultImportsштатов
Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не влияет на выдачу кода, только на проверку типов.
Это значит? если нет экспорта по умолчанию, чем я думаю, единственный вариант использования импорта по умолчанию - это что-то инициализировать? как синглтон?
Следующий вопрос / ответ также не имеет смысла. Есть ли способ использовать --esModuleInterop в tsconfig вместо того, чтобы он был флагом?
И --esModuleInteropопределение на странице компилятора
Выпустите помощники __importStar и __importDefault для совместимости с экосистемой babel во время выполнения и включите --allowSyntheticDefaultImports для совместимости с системами типов.
Мне тоже показалось трудным понять / понять
--esModuleInteropфлага,import * as moment from 'moment'было не правильно.import moment = require('moment')был.