Như trong tiêu đề: không hỗ trợ TypeScript không gian tên? Nếu vậy, làm thế nào để sử dụng chúng?TypeScript có hỗ trợ không gian tên không?
Trả lời
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.
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ý.
vì từ điển 1.5 có một từ khóa –
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
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/
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
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ộ.
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 module
và namespace
.
Cả hai tập lệnh 'module' và' namespace' đều có cùng mã JavaScript. –
Tôi sẽ không đề xuất 'namespace' hay trộn lẫn nó với mã nguồn' module'. – fletchsod
- 1. TypeScript có hỗ trợ TouchEvent không?
- 2. Squeak có hỗ trợ không gian tên không?
- 3. HTML5 có hỗ trợ không gian tên không?
- 4. Hỗ trợ Ruby cho các không gian tên XML
- 5. Hỗ trợ Mã VS2010 có hỗ trợ nUnit không?
- 6. S3 có hỗ trợ HTTP pipelining không?
- 7. Hỗ trợ TypeScript cho EmberJS, AngularJS hoặc BatmanJS
- 8. Arduino có hỗ trợ luồng không?
- 9. MemoryCache có hỗ trợ vùng không?
- 10. Hỗ trợ không gian địa lý trong JPA
- 11. Weblogic có hỗ trợ CDI Beans không?
- 12. iPhone có hỗ trợ XML-RPC không?
- 13. Mono có hỗ trợ XAML không?
- 14. GCC có hỗ trợ lâu dài không?
- 15. VC++ có hỗ trợ _mm_malloc không?
- 16. AutoMapper có hỗ trợ LINQ không?
- 17. IE10 có hỗ trợ FormData() không?
- 18. PowerShell có hỗ trợ OOP không?
- 19. GWT có hỗ trợ php không?
- 20. Có định nghĩa hỗ trợ tryhaskell.org không?
- 21. Cassandra có hỗ trợ sharding không?
- 22. Tomcat có hỗ trợ TLS v1.2 không?
- 23. DS.FixtureAdapter có hỗ trợ sideload không?
- 24. CMake có hỗ trợ Python3 không?
- 25. PhantomJS có hỗ trợ cookie không?
- 26. Golang TLS có hỗ trợ IE8 không?
- 27. PyCharm có hỗ trợ Jinja2 không?
- 28. Wcf basicHttpBinding có hỗ trợ PerSession không?
- 29. PySide có hỗ trợ Python 3 không?
- 30. Qemu/kvm có hỗ trợ ovf không?
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
Tôi sẽ không đề xuất 'namespace' hay trộn lẫn nó với mã nguồn' module'. – fletchsod