TypeScript模块命名空间在多个文件中

And*_*ers 24 typescript

我试图在Typescript中模仿C#的一个特性.

假设我有这个文件夹结构

App.ts
Models/
    Person.ts
    Message.ts
Run Code Online (Sandbox Code Playgroud)

然后我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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Val*_*tin 33

这是我的建议.我想你想要做的是定义一个扩展到几个源文件的模块.要实现此目的,您需要使用内部模块,如下所示:

型号/ Person.ts

module Model {

  export class Person {
      name: string;
      Message : Message;
      constructor(name: string) {
          this.name = name;
      }   
  }
}
Run Code Online (Sandbox Code Playgroud)

型号/ Message.ts

module Model {
   export class Message {
       message: string;
       constructor(message: string) {
          this.message = message;
       }   
   }
}
Run Code Online (Sandbox Code Playgroud)

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");
        }   
    }   
}
Run Code Online (Sandbox Code Playgroud)

如果你用它编译

tsc App.ts
Run Code Online (Sandbox Code Playgroud)

一切都应该有效.注意如何outer在两个源文件中声明模块.由于这是一个内部模块,我们必须通过添加///<reference path='foo.ts'/>语句告诉编译器将它们放入我们的范围.