2012-10-11 17 views
22

Tôi đang cố gắng bắt chước một tính năng của C# trong Typescript.Nhập tên mô-đun TypeScript trong nhiều tệp

Hãy nói tôi có cấu trúc thư mục này

App.ts 
Models/ 
    Person.ts 
    Message.ts 

tôi sau đó trong App.ts muốn điều này:

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

Làm thế nào tôi sẽ làm điều này?

Trả lời

33

Đây là đề xuất của tôi. Tôi nghĩ rằng những gì bạn muốn làm là xác định một mô-đun mở rộng trên một số tập tin nguồn. Để đạt được điều này, bạn cần phải sử dụng một nội mô-đun như sau:

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

Nếu bạn biên dịch này với

tsc App.ts 

sau đó tất cả mọi thứ nên làm việc. Lưu ý cách mô-đun outer được khai báo trong hai tệp nguồn. Vì đây là mô-đun nội bộ, chúng tôi phải yêu cầu trình biên dịch đưa chúng vào phạm vi của chúng tôi bằng cách thêm câu lệnh ///<reference path='foo.ts'/>.

+0

Hoạt động tốt trong Visual studio. Có thể chỉ nhập một trong các tệp này không? Trong VS bạn thường sử dụng /// . Điều này có khả thi không? Ví dụ: ? – Anders

+1

Để tham khảo trong tương lai, điều này là có thể. Vì vậy, bạn có thể tạo một tệp "allModels.ts" chứa /// refs. – Anders

+0

tại sao lưu trữ Người và Thư trong các tệp riêng biệt? Tôi có thể có một tệp Model.ts chỉ với các định nghĩa lớp mà không bị gói trong một mô-đun không? Nếu vậy làm thế nào tôi sẽ nhập khẩu các định nghĩa trong App.ts .. – FutuToad

Các vấn đề liên quan