Ich habe gerade eine .tsconfigDatei ausgecheckt und dort entdeckt--esModuleInterop
Dies ist seine .tsconfigAkte
{
"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"]
}
Hier ist meine Hauptfrage, was ist "esModuleInterop": true,und
"allowSyntheticDefaultImports": true,. Ich weiß, dass sie irgendwie von der abhängig sind "module": "commonjs",. Kann jemand versuchen, es in der bestmöglichen menschlichen Sprache zu erklären?
Die offiziellen Dokumente für allowSyntheticDefaultImportsStaaten
Standardimporte aus Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Code-Ausgabe aus, sondern nur auf die Typüberprüfung.
Bedeutet das? Wenn es keinen Exportstandard gibt, besteht der einzige Anwendungsfall des Importstandards darin, etwas zu initialisieren. wie Singleton?
Die folgende Frage / Antwort ist ebenfalls nicht sinnvoll. Gibt es eine Möglichkeit, --esModuleInterop in tsconfig zu verwenden, anstatt ein Flag zu sein?
Und --esModuleInteropDefinition auf der Compilerseite
Geben Sie die Hilfsprogramme __importStar und __importDefault für die Kompatibilität des Laufzeit-Babel-Ökosystems aus und aktivieren Sie --allowSyntheticDefaultImports für die Typsystemkompatibilität.
Auch schien mir schwer zu verstehen / zu verstehen
--esModuleInteropFlaggeimport * as moment from 'moment'war nicht korrekt.import moment = require('moment')war.