2012-10-05 24 views

Trả lời

55

nguyên cảo cho phép để xác định module liên quan chặt chẽ với những gì sẽ được trong ECMAScript 6. Ví dụ sau đây được lấy từ spec:

module outer { 
    var local = 1; 
    export var a = local; 
    export module inner { 
     export var x = 10; 
    } 
} 

Như bạn thấy, mô-đun có tên và có thể được lồng vào nhau. Nếu bạn sử dụng dấu chấm trong tên mô-đun, nguyên cảo sẽ biên dịch này để các module lồng nhau như sau:

module A.B.C { 
    export var x = 1; 
} 

Đây là bằng

module A { 
    module B { 
     module C { 
      export var x = 1; 
     } 
    } 
} 

gì cũng quan trọng là nếu bạn sử dụng lại tên mô-đun cùng chính xác trong một chương trình loại, mã sẽ thuộc về cùng một mô-đun. Do đó, bạn có thể sử dụng các mô đun lồng nhau để thực thi các không gian tên phân cấp.

+0

Lưu ý rằng các mô-đun này bây giờ được gọi là không gian tên: https://github.com/Microsoft/TypeScript/issues/2159 – Alex

+0

Tôi sẽ không đề xuất 'namespace' hay trộn lẫn nó với mã nguồn' module'. – fletchsod

7

Không có từ khóa 'không gian tên', nhưng mô-đun nội bộ (sử dụng từ khoá 'mô đun') và mô-đun bên ngoài (sử dụng từ khóa 'xuất') cung cấp cách tương tự để phân đoạn mã của bạn thành phân cấp hợp lý.

+5

vì từ điển 1.5 có một từ khóa –

+0

Tôi sẽ không đề xuất 'không gian tên' cũng như không trộn lẫn nó với mã nguồn' module'. – fletchsod

9

Dưới đây là một ví dụ nguyên cảo namespace:

///<reference path='AnotherNamespace/ClassOne.ts'/> 
///<reference path='AnotherNamespace/ClassTwo.ts'/> 

module MyNamespace 
{ 
    import ClassOne = AnotherNamespace.ClassOne; 
    import ClassTwo = AnotherNamespace.ClassTwo; 

    export class Main 
    { 
     private _classOne:ClassOne; 
     private _classTwo:ClassTwo; 

     constructor() 
     { 
      this._classOne = new ClassOne(); 
      this._classTwo = new ClassTwo(); 
     } 
    } 
} 

Bạn có thể kiểm tra thêm ở đây: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

3

False ...

module A.B.C { 
    export var x = 1; 
} 

bằng

module A { 
    export module B { 
     export module C { 
      export var x = 1; 
     } 
    } 
} 

bởi vì bạn có thể viết ngoài module A:

var y = A.B.C.x; 

Nhưng:

module A { 
    module B { 
     module C { 
      export var x = 1; 
     } 
     var y = C.x; // OK 
    } 
    //var y = B.C.x; // Invalid 
} 
//var y = A.B.C.x; // Invalid 
28

Tính đến phiên bản 1.5, nguyên cảo hỗ trợ namespace từ khóa. Không gian tên tương đương với các mô-đun nội bộ.

Từ What's new in Typescript:

Trước:

module Math { 
    export function add(x, y) { ... } 
} 

Sau:

namespace Math { 
    export function add(x, y) { ... } 
} 

Đối với việc xác định một mô-đun nội bộ, bây giờ bạn có thể sử dụng cả hai modulenamespace.

+1

Cả hai tập lệnh 'module' và' namespace' đều có cùng mã JavaScript. –

+0

Tôi sẽ không đề xuất 'namespace' hay trộn lẫn nó với mã nguồn' module'. – fletchsod