Как и в названии: Поддерживает машинопись пространств имен? Если да, то как я могу их использовать?
Поддерживает ли машинопись имен?
Машинопись позволяет определить модули тесно связан с тем, что будет в ECMAScript 6. Следующий пример взят из спецификации:
module outer {
var local = 1;
export var a = local;
export module inner {
export var x = 10;
}
}
Как вы можете видеть, модули имеют имена и могут быть вложенными. Если вы используете точки в именах модулей, машинопись компилирует это вложенные модули следующим образом:
module A.B.C {
export var x = 1;
}
Это равно
module A {
module B {
module C {
export var x = 1;
}
}
}
Что также важно, что если вы повторно точно такое же имя модуля в одной программе машинопись, код будет принадлежать одному и тому же модулю. Таким образом, вы можете использовать вложенные модули для реализации hierarchichal пространств имен.
Начиная с версии 1.5, Машинопись поддерживает namespaceключевое слово. Пространства имен эквивалентны внутренних модулей.
Из Что нового в машинописном :
До:
module Math { export function add(x, y) { ... } }После:
namespace Math { export function add(x, y) { ... } }
Для определения внутреннего модуля, теперь вы можете использовать как moduleи 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();
}
}
}
Вы можете проверить больше здесь: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/
Там нет «пространства имен» ключевого слова, но внутренние модули (с использованием модулем «» ключевого слова) и внешние модули (с помощью «экспорта» ключевого слово) предлагают аналогичный способ разбиения на разделы кода в логические иерархии.
Ложь...
module A.B.C {
export var x = 1;
}
равно
module A {
export module B {
export module C {
export var x = 1;
}
}
}
потому что вы можете написать за пределами модуля А:
var y = A.B.C.x;
Но :
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













