Sprawdzałem czyjś .tsconfigplik i tam zauważyłem--esModuleInterop
To jego .tsconfigakta
{
"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"]
}
Tutaj moje podstawowe pytanie brzmi: czym jest "esModuleInterop": true,i
"allowSyntheticDefaultImports": true,. Wiem, że są zależne od "module": "commonjs",. Czy ktoś może spróbować wyjaśnić to w możliwie najlepszym ludzkim języku?
Oficjalne dokumenty dla allowSyntheticDefaultImportsstanów
Zezwalaj na domyślne importowanie z modułów bez domyślnego eksportu. Nie wpływa to na emisję kodu, tylko na sprawdzanie typu.
Czy to znaczy? jeśli nie ma żadnego domyślnego eksportu, to myślę, że jedynym przypadkiem użycia domyślnego importu byłoby zainicjowanie czegoś? jak singleton?
Następujące pytanie / odpowiedź również nie ma sensu. Czy istnieje sposób użycia opcji --esModuleInterop w tsconfig, zamiast bycia flagą?
I --esModuleInteropdefinicja na stronie kompilatora
Emituj pomocniki __importStar i __importDefault, aby zapewnić zgodność ekosystemu Babel w środowisku wykonawczym i włącz opcję --allowSyntheticDefaultImports, aby zapewnić zgodność systemu typów.
Wydawało mi się również trudne do zrozumienia / zrozumienia
--esModuleInteropflagi nieimport * as moment from 'moment'było poprawne. był.import moment = require('moment')