2016-05-09 12 views
10

Tôi đã sử dụng loại bản ghi từ một vài tháng và tôi chưa hiểu sự khác biệt từ không gian tên và mô-đun.Sự khác biệt giữa không gian tên và mô-đun trong loại

Tôi biết rằng trước khi chúng được đặt tên là nội bộmô-đun bên ngoài, nhưng với cả hai tôi có thể nhập các lớp từ các tệp khác. Vì vậy, sự khác biệt thực sự là gì?

+2

[Namespaces và Modules] (https: //github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Namespaces%20and%20Modules.md) –

+0

Khi tôi hiểu nó không gian tên được sử dụng để được gọi là "mô-đun" và đến trong TypeScript trước khi ECMAScript đã đưa ra một tiêu chuẩn mô-đun. Bây giờ ES có một mô-đun tiêu chuẩn TS đổi tên thành "mô-đun" thành "không gian tên" và thêm hỗ trợ cho các mô-đun ES. Tôi không nghĩ có bất kỳ lý do thực sự nào để sử dụng không gian tên phía trước. – Aaron

+2

Đọc "Không gian tên và mô-đun" từ @Nitzan Tomer làm tôi bối rối hơn. Vì vậy, bạn có nghĩ rằng tôi phải chỉ sử dụng các mô-đun? –

Trả lời

3

Không gian tên là cách cấu trúc mã của TypeScript khi bạn không muốn mã Javascript được xuất ra để sử dụng trình tải mô-đun.

Bạn có thể tìm hiểu thêm về không gian tên so với mô-đun trong sổ tay here.

2

Như được nêu trong TS-handbook có 2 loại mô-đun: "nội bộ" & "bên ngoài". Mã trong mô-đun bên trong được viết bằng Loại và chữ "bên ngoài" được viết bằng Javascript.

Để phù hợp với thuật ngữ ECMAScript 2015 mới của họ đã quyết định đổi tên họ như sau:

  1. 'module nội bộ' là bây giờ 'namespace'.
  2. "module bên ngoài" bây giờ chỉ đơn giản là "module", như để phù hợp với ECMAScript

Vì vậy:

  • Cách bạn viết mã của bạn là khác nhau
  • Khi sử dụng module các lớp học không được hiển thị trong phạm vi toàn cầu, trong khi sử dụng các không gian tên:

Ví dụ:

Giả sử bạn có chuỗi không gian tên công khai NamespaceA.NamespaceB.NamespaceC hiển thị lớp công khai ClassD. Bạn có thể truy cập vào tất cả các trên toàn cầu theo cách này:

window.NamespaceA 
window.NamespaceA.NamespaceB 
window.NamespaceA.NamespaceB.NamespaceC 
window.NamespaceA.NamespaceB.NamespaceC.ClassD 

mà không nói window.NamespaceA = NamespaceA

và nếu bạn sử dụng các module bạn phải sử dụng "ma thuật" ở trên

Các vấn đề liên quan