2012-10-11 14 views
22

मैं टाइपस्क्रिप्ट में सी # की एक विशेषता की नकल करने की कोशिश कर रहा हूं।एकाधिक फ़ाइलों में टाइपस्क्रिप्ट मॉड्यूल नेमस्पेसिंग

Let कहते हैं कि मैं App.ts में इस फ़ोल्डर संरचना

App.ts 
Models/ 
    Person.ts 
    Message.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; 
     } 
    } 
} 

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

आप

tsc App.ts 

के साथ इस संकलन तो सब कुछ काम करना चाहिए। ध्यान दें कि मॉड्यूल outer दो स्रोत फ़ाइलों में घोषित किया गया है। चूंकि यह आंतरिक मॉड्यूल है, इसलिए हमें ///<reference path='foo.ts'/> कथन जोड़कर उन्हें हमारे दायरे में रखने के लिए कंपाइलर को बताना होगा।

+0

विजुअल स्टूडियो में भी अच्छा काम करता है। क्या इन फ़ाइलों में से केवल एक को आयात करना संभव होगा? वीएस में आप आमतौर पर /// <संदर्भ पथ = "_ allRefs.js" /> का उपयोग करते हैं। क्या यह संभव होगा? उदा। <संदर्भ पथ = "AllModels.ts" />? – Anders

+1

भविष्य के संदर्भ के लिए, यह संभव है। तो आप एक फ़ाइल "allModels.ts" बना सकते हैं जिसमें /// refs शामिल हैं। – Anders

+0

अलग-अलग फाइलों में व्यक्ति और संदेश क्यों स्टोर करें? क्या मेरे पास मॉड्यूल में लपेटे बिना केवल क्लास परिभाषाओं के साथ Model.ts फ़ाइल हो सकती है? यदि हां, तो मैं इन परिभाषाओं को App.ts में कैसे आयात करूं .. – FutuToad

संबंधित मुद्दे