2012-10-11 27 views
22

Estoy intentando imitar una característica de C# en Typescript.Espacio de nombres de módulo de TypeScript en varios archivos

Digamos que tengo esta estructura de carpetas

App.ts 
Models/ 
    Person.ts 
    Message.ts 

Entonces en App.ts querer esto:

module MyAppNamespace { 
    export class ChatApp { 
     User: Models.Person; 
     constructor() => { 
      this.User = new Models.Person("John"); 
      this.User.Message = new Models.Message("Hello World"); 
     } 
    } 
} 

¿Cómo voy a hacer esto?

Respuesta

33

Aquí está mi sugerencia. Creo que lo que quieres hacer es definir un módulo que abarque varios archivos fuente. Para lograr esto, es necesario utilizar un módulo internode la siguiente manera:

Modelos/Person.ts

module Model { 

    export class Person { 
     name: string; 
     Message : Message; 
     constructor(name: string) { 
      this.name = name; 
     } 
    } 
} 

Modelos/Message.ts

module Model { 
    export class Message { 
     message: string; 
     constructor(message: string) { 
      this.message = message; 
     } 
    } 
} 

App .ts

///<reference path='Models/Person.ts'/> 
///<reference path='Models/Message.ts'/> 
module MyAppNamespace { 
    export class ChatApp { 
     User: Model.Person; 
     constructor() => { 
      this.User = new Model.Person("John"); 
      this.User.Message = new Model.Message("Hello World"); 
     } 
    } 
} 

Si compila esto con

tsc App.ts 

entonces todo debería funcionar. Observe cómo el módulo outer se declara en dos archivos fuente. Como se trata de un módulo interno, tenemos que indicar al compilador que los incluya en nuestro ámbito agregando declaraciones ///<reference path='foo.ts'/>.

+0

Funciona bien en Visual Studio también. ¿Sería posible solo tener que importar uno de estos archivos? En VS normalmente utiliza /// . ¿Sería esto posible? E.g: ? – Anders

+1

Para referencia futura, esto es posible. Por lo tanto, podría crear un archivo "allModels.ts" que contenga los /// refs. – Anders

+0

¿por qué almacenar Persona y mensaje en archivos separados? ¿Podría tener un archivo Model.ts con solo las definiciones de la clase sin estar envuelto en un módulo? Si es así, ¿cómo importaría estas definiciones en App.ts .. – FutuToad

Cuestiones relacionadas