Al igual que en el título: ¿Tiene espacios de nombres de apoyo mecanografiado? Si es así, ¿cómo se utiliza ellos?
Hace espacio de nombres apoyo mecanografiado?
Letra de imprenta permite definir módulos estrechamente relacionados a lo que será en ECMAScript 6. En el ejemplo siguiente se toma de la especificación:
module outer {
var local = 1;
export var a = local;
export module inner {
export var x = 10;
}
}
Como se puede ver, los módulos tienen nombres y se pueden anidar. Si utiliza puntos en los nombres de módulos, mecanografiado compilará esto a módulos anidados de la siguiente manera:
module A.B.C {
export var x = 1;
}
Esto es igual a
module A {
module B {
module C {
export var x = 1;
}
}
}
Lo que también es importante es que si vuelve a utilizar exactamente el mismo nombre del módulo en un programa mecanografiado, el código pertenecerá al mismo módulo. Por lo tanto, puede utilizar módulos anidados para implementar espacios de nombres hierarchichal.
A partir de la versión 1.5, Letra de imprenta apoya namespacepalabra clave. Los espacios de nombres son equivalentes a los módulos internos.
De Qué hay de nuevo en imprenta :
Antes de:
module Math { export function add(x, y) { ... } }Después:
namespace Math { export function add(x, y) { ... } }
Para la definición de un módulo interno, ahora se puede utilizar tanto moduley namespace.
Aquí es un ejemplo mecanografiado espacio de nombres:
///<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();
}
}
}
Puede ver más aquí: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/
No hay ninguna palabra clave 'espacio de nombres', pero los módulos internos (utilizando la palabra clave 'módulo') y los módulos externos (utilizando la palabra clave 'exportación') ofrecen una manera similar a particionar el código en jerarquías lógicas.
Falso...
module A.B.C {
export var x = 1;
}
es igual a
module A {
export module B {
export module C {
export var x = 1;
}
}
}
porque se puede escribir fuera del módulo A:
var y = A.B.C.x;
Pero :
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













