Cách chính xác là tiếp tục sử dụng cú pháp nhập cũ. Cú pháp nhập mới chỉ dành cho các mô-đun ES, cú pháp nhập cũ là dành cho các mô-đun tiền ES6. Hai là khác biệt, cố ý như vậy. import * as foo from 'foo'
nhập khẩu tất cả các thuộc tính của các mô-đun 'foo', nó không nhập giá trị mặc định như foo
.
From the designer of the feature:
- Một tuyên bố mặc định xuất khẩu luôn luôn tuyên bố một thành viên mang tên mặc định xuất khẩu và luôn phát ra như một bài tập để exports.default. Nói cách khác,
export default
luôn có ngữ nghĩa mô-đun ES. Để tương thích với Babel, chúng tôi có thể tùy chọn phát ra điểm đánh dấu __esModule
khi mô-đun có xuất mặc định, nhưng chúng tôi sẽ không thực sự sử dụng điểm đánh dấu đó cho bất kỳ thứ gì.
- Tuyên bố
export =
, thay thế một thực thể khác để được xuất khẩu thay cho chính mô-đun, luôn được phát ra dưới dạng nhiệm vụ cho module.exports
. Đó là lỗi khi có các lần xuất khác trong mô-đun sử dụng export =
. Đây là hành vi TypeScript hiện có.
- Mô-đun sử dụng
export =
để xuất mô-đun khác (có thể nhập mô-đun bên trong hoặc bên ngoài) bằng cách sử dụng cấu trúc ES6 mới. Đặc biệt, nhập khẩu thuận tiện phá hoại có thể được sử dụng với các mô-đun như vậy. Mẫu sử dụng export =
để xuất mô-đun khác là phổ biến trong các tệp .d.ts cung cấp chế độ xem CommonJS/AMD của mô-đun nội bộ (ví dụ: angular.d.ts).
- Mô-đun sử dụng
export =
để xuất một thực thể không phải mô-đun thay cho chính mô-đun phải được nhập bằng cú pháp hiện tại import x = require("foo")
như trường hợp hôm nay.
2016 update: Trình biên dịch nguyên cảo tại một số điểm bắt đầu cho phép import * as foo from 'legacy-module-foo'
để có được việc nhập khẩu mặc định của một module di sản trong những hoàn cảnh nhất định. Điều này vi phạm đặc điểm kỹ thuật ES6 (§15.2.1.16, "Giá trị" * "cho biết yêu cầu nhập cho mô-đun đích là namespace object.”).
Khi module di sản bạn nhập theo cách này được cập nhật để ES6 mô-đun, các “mặc định” nhập khẩu cho những mô-đun sẽ ngừng làm việc (vì * as foo
nhập khẩu là phải được nhập khẩu namespace đối tượng), có thể là vô cùng gây nhầm lẫn nếu bạn không biết rằng làm điều này là một lỗi TypeScript/SystemJS. Cũng có thể là việc sắp xếp lại TypeScript trong tương lai cho đặc tả ES sẽ khiến chúng phá vỡ. Vì vậy, có lẽ bạn nên tiếp tục sử dụng cú pháp nhập thừa được mô tả ở trên để tải các mô-đun cũ để tránh nhầm lẫn bản thân và các nhà phát triển khác làm việc trên mã của bạn về cách nhập không gian tên ES6 và tránh các thay đổi phá vỡ gây nhầm lẫn.
Nguồn
2015-04-13 05:28:27
Có một cuộc thảo luận chi tiết ở đây http://www.2ality.com/2014/09/es6-modules-final.html – user5321531