2012-10-05 12 views

risposta

55

tipografico permette di definire moduli strettamente legato a quello che sarà in ECMAScript 6. L'esempio che segue è tratto dal spec:

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

Come si può vedere, i moduli hanno nomi e possono essere nidificate. Se si utilizzano i punti di nomi di modulo, dattiloscritto si compilare questo per moduli annidati nel seguente modo:

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

Questo è pari a

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

Qual è anche importante è che se si riutilizza lo stesso identico nome del modulo un programma dattiloscritto, il codice apparterrà allo stesso modulo. Quindi, è possibile utilizzare i moduli annidati per implementare gli spazi dei nomi hierarchichal.

+0

Si noti che questi moduli sono ora indicati come spazi dei nomi: https://github.com/Microsoft/TypeScript/issues/2159 – Alex

+0

Non avrei consigliato 'namespace' né mescolandolo con' codice sorgente module'. – fletchsod

7

Non esiste una parola chiave 'namespace', ma i moduli interni (utilizzando la parola chiave 'module') ei moduli esterni (utilizzando la parola chiave 'export') offrono un modo simile per suddividere il codice in gerarchie logiche.

+5

dal dattiloscritto 1.5 v'è una tale parola chiave –

+0

Non avrei consigliato 'namespace' né mescolandolo con' codice sorgente module'. – fletchsod

9

Ecco un esempio dattiloscritto 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(); 
     } 
    } 
} 

È possibile controllare più qui: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

3

False ...

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

è pari a

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

perché si può scrivere al di fuori del modulo A:

var y = A.B.C.x; 

Ma:

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

A partire dalla versione 1.5, supporta tipografico namespace parola chiave. I namespace sono equivalenti ai moduli interni.

Da What's new in Typescript:

Prima:

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

Dopo:

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

Per la definizione di un modulo interno, ora è possibile utilizzare sia module e namespace.

+1

Sia 'module' che' namespace' traspongono allo stesso codice JavaScript. –

+0

Non consiglierei 'namespace' né mescolarlo con il codice sorgente' module'. – fletchsod

Problemi correlati