Tôi đang kiểm tra .tsconfighồ sơ của ai đó và ở đó tôi phát hiện ra--esModuleInterop
Đây là .tsconfighồ sơ của anh ấy
{
"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"]
}
Đây, câu hỏi chính của tôi là cái gì "esModuleInterop": true,và
"allowSyntheticDefaultImports": true,. Tôi biết họ phụ thuộc vào "module": "commonjs",. Ai đó có thể cố gắng giải thích nó bằng ngôn ngữ con người tốt nhất có thể không?
Các tài liệu chính thức cho allowSyntheticDefaultImportscác tiểu bang
Cho phép nhập mặc định từ các mô-đun không có xuất mặc định. Điều này không ảnh hưởng đến việc phát ra mã, chỉ là đánh máy.
Có nghĩa là? nếu không có bất kỳ mặc định xuất nào thì tôi nghĩ trường hợp sử dụng duy nhất của mặc định nhập sẽ là khởi tạo thứ gì đó? như singleton?
Câu hỏi / câu trả lời sau cũng không có ý nghĩa Có cách nào để sử dụng --esModuleInterop trong tsconfig thay vì nó là một lá cờ không?
Và --esModuleInteropđịnh nghĩa trên trang trình biên dịch
Phát ra các trình trợ giúp __importStar và __importDefault để tương thích với hệ sinh thái babel trong thời gian chạy và bật --allowSyntheticDefaultImports để tương thích với hệ thống kiểu chữ.
Cũng có vẻ khó hiểu đối với tôi
--esModuleInteroplá cờ,import * as moment from 'moment'là không chính xác.import moment = require('moment')đã.