2012-10-11 17 views
22

Sto tentando di simulare una funzionalità di C# in Typescript.Nomi dei nomi dei moduli TypeScript in più file

Let dire che ho questa struttura di cartelle

App.ts 
Models/ 
    Person.ts 
    Message.ts 

Ho poi in App.ts volere questo:

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

Come faccio a fare questo?

risposta

33

Ecco il mio suggerimento. Penso che quello che vuoi fare è definire un modulo che si estende su diversi file sorgente. Per raggiungere questo obiettivo, è necessario utilizzare un modulo internocome segue:

modelli/Person.ts

module Model { 

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

modelli/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"); 
     } 
    } 
} 

Se si compila questo con

tsc App.ts 

allora tutto dovrebbe funzionare. Si noti come il modulo outer è dichiarato in due file di origine. Poiché si tratta di un modulo interno interno, dobbiamo dire al compilatore di inserirli nel nostro ambito aggiungendo le dichiarazioni ///<reference path='foo.ts'/>.

+0

Funziona bene anche in Visual Studio. Sarebbe possibile solo importare uno di questi file? In VS normalmente usi /// . Sarebbe possibile? E.g: ? – Anders

+1

Per riferimento futuro, questo è possibile. Quindi potresti creare un file "allModels.ts" che contiene ///secs. – Anders

+0

perché memorizzare persona e messaggio in file separati? Posso avere un file Model.ts con solo le definizioni di classe senza essere racchiuso in un modulo? In tal caso, come importerei queste definizioni in App.ts .. – FutuToad

Problemi correlati