Eu estava verificando o .tsconfigarquivo de alguém e lá encontrei--esModuleInterop
Este é o .tsconfigarquivo dele
{
"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"]
}
Aqui, minha pergunta principal é o que é "esModuleInterop": true,e
"allowSyntheticDefaultImports": true,. Eu sei que eles são meio que dependentes do "module": "commonjs",. Alguém pode tentar explicá-lo na melhor linguagem humana possível?
Os documentos oficiais dos allowSyntheticDefaultImportsestados
Permitir importações padrão de módulos sem exportação padrão. Isso não afeta a emissão de código, apenas a verificação de digitação.
Isso significa? se não houver nenhum padrão de exportação, então acho que o único caso de uso do padrão de importação seria inicializar algo? como singleton?
A pergunta / resposta a seguir também não faz sentido. Existe uma maneira de usar --esModuleInterop em tsconfig em vez de ser um sinalizador?
E a --esModuleInteropdefinição na página do compilador
Emita ajudantes __importStar e __importDefault para compatibilidade de ecossistema babel em tempo de execução e habilite --allowSyntheticDefaultImports para compatibilidade de sistema de tipos.
Também parecia difícil para mim entender / compreender
--esModuleInteropbandeira, nãoimport * as moment from 'moment'estava correto. foi.import moment = require('moment')