टाइपप्रति: समाधान में एकाधिक परियोजनाओं

वोट
10

मैं अपने सभी के बारे में 60 कक्षाओं में विजुअल स्टूडियो 2012 सभी में टाइपप्रति करने के लिए JavaScript पुस्तकालय पोर्टिंग पूरा करने के बाद, हर वर्ग के साथ अपने स्वयं के .ts फाइल में परिभाषित।

सभी वर्गों को एक ही मॉड्यूल में परिभाषित कर रहे हैं। मैं संदर्भ टिप्पणियों का उपयोग अन्य फ़ाइलों में परिभाषित वर्गों के लिए Reder करने के लिए। हर फ़ाइल के लेआउट इस प्रकार है:

///<reference path='./../myotherclass.ts' />

module MyModule {

    export class MyClass {
        ...
    }

}

अब मैं एक ही समाधान है जो वास्तविक आवेदन मेरी नई-नई पोर्ट लाइब्रेरी का उपयोग होने जा रहा है में एक दूसरी परियोजना बना लिया है। मैं अपने पुस्तकालय किसी भी तरह शामिल करने के लिए है और मुझे लगता है कि है कि क्या मॉड्यूल प्रणाली के लिए है। हालांकि, मुझे यकीन है कि के रूप में MyModule पर फ़ाइलें के दर्जनों में फैला हुआ है क्या फ़ाइल (फ़ाइलें) आयात करने के लिए नहीं कर रहा हूँ। यह है कि क्या मैं के लिए .d.ts फ़ाइल का उपयोग कर सकते है?

इसके अलावा, एक मॉड्यूल आयात करने के लिए सक्षम होने के लिए, यह 'निर्यात' कीवर्ड के साथ घोषित किया जाना है, लेकिन अगर मुझे लगता है कि तो इसे अब और संदर्भ टिप्पणियों से नहीं मिला है।

सब उस के शीर्ष पर, दोनों परियोजनाओं संकलित किया जाना चाहिए ताकि संकलक उत्पादन आसानी से requireJS की तरह एक मॉड्यूल लोडर के साथ प्रयोग किया जा सकता है।

सबसे अच्छा तरीका यह सब पूरा करने के लिए क्या है?

धन्यवाद!

07/10/2012 को 16:41
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
9

ठीक है, तो मेरे कह रही है कि "मॉड्यूल" अलग अलग बातें मतलब हो सकता है द्वारा शुरू करते हैं। उदाहरण के लिए, "मॉड्यूल पैटर्न" है जो अपने "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 एएमडी" पैरामीटर में उत्तीर्ण होना होगा करने के लिए टाइपप्रति प्राप्त करने के लिए।

वैसे भी, मुझे आशा है कि मैं इस स्थिति में अच्छी तरह से बात करने के लिए पर्याप्त आप यह पता लगाने की क्या वास्तव में आप की जरूरत / अभाव में सक्षम हो जाएगा की व्याख्या की। मॉड्यूल के प्रकार तुम सच पर निर्भर करेगा का उपयोग कर आप उन्हें कैसे उपयोग करेंगे ... यानी, नोड, वेब, या कुछ दोनों का मिश्रण खत्म।

07/10/2012 को 20:22
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more