2012-10-11 17 views
22

Próbuję naśladować funkcję C# w maszynie do pisania.Wypisywanie nazw modułów nazw w wielu plikach

powiedzmy mam tej struktury folderów

App.ts 
Models/ 
    Person.ts 
    Message.ts 

I wtedy w App.ts chcą w ten sposób:

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

Jak to zrobić?

Odpowiedz

33

Oto moja sugestia. Myślę, że to, co chcesz zrobić, to zdefiniować moduł, który rozciąga się na kilka plików źródłowych. Aby to osiągnąć, trzeba użyć wewnętrzny moduł następująco:

models/Person.ts

module Model { 

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

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

Jeśli skompilować to z

tsc App.ts 

wtedy wszystko powinno działać. Zauważ, jak deklarowany jest moduł outer w dwóch plikach źródłowych. Ponieważ jest to moduł wewnętrzny, musimy powiedzieć kompilatorowi, aby umieścić je w naszym zasięgu, dodając instrukcje ///<reference path='foo.ts'/>.

+0

Działa również w Visual Studio. Czy będzie możliwe zaimportowanie tylko jednego z tych plików? W VS zwykle używasz /// . Czy to byłoby możliwe? E.g: <ścieżka odniesienia = "AllModels.ts" />? – Anders

+1

Dla przyszłego odniesienia jest to możliwe. Można więc utworzyć jeden plik "allModels.ts", który zawiera /// pliki referencyjne. – Anders

+0

dlaczego przechowywać Osobę i Wiadomość w osobnych plikach? Czy mogę mieć plik Model.ts z tylko definicjami klas bez zawijania w moduł? Jeśli tak, to w jaki sposób zaimportować te definicje w App.ts .. – FutuToad

Powiązane problemy