2012-10-05 55 views

Respuesta

55

imprenta permite definir módulos estrechamente relacionado con lo que será en ECMAScript 6. El siguiente ejemplo está tomado 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 un programa mecanografiado, el código pertenecerá al mismo módulo. Por lo tanto, puede usar módulos anidados para implementar espacios de nombres jerárquicos.

+0

Tenga en cuenta que estos módulos ahora se denominan espacios de nombres: https://github.com/Microsoft/TypeScript/issues/2159 – Alex

+0

No recomendaría 'namespace' ni lo mezclaría con el código fuente' module'. – fletchsod

7

No hay palabra clave 'namespace', pero los módulos internos (usando la palabra clave 'module') y los módulos externos (usando la palabra clave 'export') ofrecen una forma similar de dividir el código en jerarquías lógicas.

+5

desde mecanografiado 1.5 existe tal palabra clave –

+0

No recomendaría 'namespace' ni lo mezclaría con el código fuente' module'. – fletchsod

9

Aquí está 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/

3

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 
28

partir de la versión 1.5, Letra de imprenta apoya namespace palabra clave. Los espacios de nombres son equivalentes a los módulos internos.

De What's new in Typescript:

Antes:

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

Después:

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

Para definir un módulo interno, ahora se puede utilizar tanto module y namespace.

+1

Tanto 'module' como' namespace' transpilan al mismo código JavaScript. –

+0

No recomendaría 'namespace' ni lo mezclaría con el código fuente' module'. – fletchsod

Cuestiones relacionadas