ठीक है, तो मेरे कह रही है कि "मॉड्यूल" अलग अलग बातें मतलब हो सकता है द्वारा शुरू करते हैं। उदाहरण के लिए, "मॉड्यूल पैटर्न" है जो अपने "MyModule" बनाता है। जहाँ तक मेरा इकट्ठा होते हैं, टाइपप्रति "आंतरिक मॉड्यूल" भाषा कल्पना में के रूप में इन के लिए संदर्भित करता है, और इन "बाहरी मॉड्यूल" है कि आप RequireJS की तरह कुछ के साथ लोड हो रहा है किया जाएगा से भिन्न होते हैं। मुख्य अंतर यह है कि बाहरी मॉड्यूल एक पूर्वनिर्धारित 'निर्यात' वस्तु वे उनकी कार्यक्षमता निर्यात करने के लिए उपयोग कर सकते हैं के साथ अपने स्वयं के अलग वातावरण की उम्मीद है।
अपने मॉड्यूल के उत्पादन पर एक नज़र डालें:
var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(MyModule || (MyModule = {}));
आप है कि यह "MyModule" जो विश्व स्तर पर अन्य स्क्रिप्ट को उपलब्ध करा दिया जाएगा तुम, उदाहरण के लिए, एक html "स्क्रिप्ट" ब्लॉक के साथ लोड फ़ाइलें में चीजों को निर्यात किया जाता है देखते हैं। होने के नाते आप का उल्लेख किया है कि आप इन में से 60 है, तो आप शायद भी संकलक उत्पादन के लिए एक एकल फाइल है कि आप के बजाय प्रत्येक फ़ाइल एक के बाद एक लोड करने की, मार्कअप में शामिल हो सकते हैं सेट कर सकते हैं।
यदि आप "मॉड्यूल MyModule {...}" के लिए "निर्यात मॉड्यूल MyModule {...}" से अपने मॉड्यूल घोषणा बदलने आगे बढ़ते, क्या उत्पादन के लिए होता पर एक नज़र डालें:
(function (MyModule) {
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
MyModule.MyClass = MyClass;
})(exports.MyModule || (exports.MyModule = {}));
जैसा कि आप देख, अपने मॉड्यूल अभी भी "मॉड्यूल पैटर्न" उपयोग कर रहा है, लेकिन यह, "निर्यात" के एक सदस्य के रूप में करने के लिए आवंटित किया जा रहा है वाचक है कि यह साथ लोड किया जा करने के लिए है, उदाहरण के लिए, नोड के "की आवश्यकता होती है" समारोह।
इस मामले में, आप वास्तव में इस कोड के साथ अपने मॉड्यूल का उपयोग करना चाहते हैं:
import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();
नोट "./MyModule" नाम वास्तव में को संदर्भित करता है फ़ाइल नाम (ऋण .js विस्तार) मॉड्यूल में परिभाषित किया गया है (यही कारण है कि वी.एस. कह रहे थे कि यह आपके लिए उन मॉड्यूल नहीं मिल सकता है)। कोड की तरह कुछ करने के लिए संकलन करना चाहिए:
var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();
यह करने के लिए जोड़ने के लिए, आप अब भी वास्तव में एक मॉड्यूल के लिए "मॉड्यूल" कीवर्ड के साथ कुछ करने की ज़रूरत। आप बस एक समारोह का निर्यात कर सकते हैं:
// foo.ts
export function foo() {
...
};
// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();
यह काम करता है क्योंकि समारोह 'foo' सीधे "निर्यात" जो "आवरण" अन्य फ़ाइल में लिए उपनामित हो जाएगा करने के लिए आवंटित किया जाएगा।
मॉड्यूल से संबंधित चीजों की इस भ्रामक गंदगी पर आगे जोड़ने के लिए, मैं भी है कि एएमडी मॉड्यूल अभी भी अलग हैं क्योंकि वे अतुल्यकालिक रूप से नोड के "की आवश्यकता होती है" के विपरीत लोड किए गए हैं, का उल्लेख करना चाहिए। उत्पादन उन आप संकलक के लिए एक "--module एएमडी" पैरामीटर में उत्तीर्ण होना होगा करने के लिए टाइपप्रति प्राप्त करने के लिए।
वैसे भी, मुझे आशा है कि मैं इस स्थिति में अच्छी तरह से बात करने के लिए पर्याप्त आप यह पता लगाने की क्या वास्तव में आप की जरूरत / अभाव में सक्षम हो जाएगा की व्याख्या की। मॉड्यूल के प्रकार तुम सच पर निर्भर करेगा का उपयोग कर आप उन्हें कैसे उपयोग करेंगे ... यानी, नोड, वेब, या कुछ दोनों का मिश्रण खत्म।