2012-10-11 19 views
22

TypescriptでC#の機能を模倣しようとしています。複数のファイルに名前空間を指定するTypeScriptモジュール

みましょう私は、このフォルダ構造

App.ts 
Models/ 
    Person.ts 
    Message.ts 

を持っていると言う私は、App.tsでこれをしたい:

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

は、私はこれをどのように行うのでしょうか?

答えて

33

ここに私の提案があります。あなたがしたいことは、いくつかのソースファイルにまたがるモジュールを定義することだと思います。これを実現するには、次のように内部モジュールを使用する必要があります。

モデル/ Person.ts

module Model { 

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

モデル/ Message.ts

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

のApp .ts

あなたは

tsc App.ts 

でこれをコンパイルする場合

その後、すべてが動作するはずです。モジュールouterが2つのソースファイルでどのように宣言されているかに注目してください。これは内部のモジュールなので、///<reference path='foo.ts'/>ステートメントを追加することで、コンパイラにそれらのスコープを指定する必要があります。

+0

Visual Studioでもうまく動作します。これらのファイルのいずれかをインポートするだけで済みますか? VSでは、通常は/// を使用します。これは可能でしょうか?例:? – Anders

+1

今後の参考として、これも可能です。したがって、/// refsを含む "allModels.ts"ファイルを1つ作成することができます。 – Anders

+0

PersonとMessageを別々のファイルに保存する理由モジュールにラップさせずに、クラス定義だけでModel.tsファイルを作成できますか?もしそうなら、これらの定義をApp.tsでどのようにインポートするのですか? – FutuToad

関連する問題