Estaba revisando el .tsconfigarchivo de alguien y allí vi--esModuleInterop
Este es su .tsconfigarchivo
{
"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"]
}
Aquí, mi pregunta principal es qué es "esModuleInterop": true,y
"allowSyntheticDefaultImports": true,. Sé que dependen en cierto modo del "module": "commonjs",. ¿Alguien puede intentar explicarlo en el mejor lenguaje humano posible?
Los documentos oficiales de los allowSyntheticDefaultImportsestados
Permitir importaciones predeterminadas desde módulos sin exportación predeterminada. Esto no afecta a la emisión del código, solo verificando el tipo.
¿Eso significa? si no hay ningún valor predeterminado de exportación, creo que el único caso de uso del valor predeterminado de importación sería inicializar algo. como singleton?
La siguiente pregunta / respuesta tampoco tiene sentido. ¿Hay alguna forma de usar --esModuleInterop en tsconfig en lugar de ser una bandera?
Y --esModuleInteropdefinición en la página del compilador
Emite los ayudantes __importStar y __importDefault para la compatibilidad del ecosistema de babel en tiempo de ejecución y habilita --allowSyntheticDefaultImports para la compatibilidad del sistema de tipos.
También me pareció difícil de entender / comprender
--esModuleInteropbandera, noimport * as moment from 'moment'fue correcto. estaba.import moment = require('moment')