Я перевіряв хтось .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')