2012-10-19 8 views
8

यदि मैं /// <reference path="..."/> वाक्यविन्यास का उपयोग कर टाइपस्क्रिप्ट घोषणा फ़ाइल (उदा। Jquery.d.ts) का संदर्भ देता हूं, तो यह सुनिश्चित करने के लिए कि मैं किसी अन्य माध्यम से संबंधित लाइब्रेरी लोड करता हूं , यानी .d.ts फ़ाइल का संदर्भ देने से लाइब्रेरी लोड नहीं होती है।इंटरफ़ेस घोषणाएं प्राप्त करने के लिए टाइपस्क्रिप्ट में आयात/आवश्यकताएं उपयोग करें

क्या टाइपस्क्रिप्ट को require() लाइब्रेरी के लिए कॉल करते समय कॉल करने का कोई तरीका है? अगर मैं एएमडी/requjs का उपयोग नहीं कर रहा था, तो मैं मैन्युअल रूप से require पर कॉल कर सकता हूं, लेकिन मैं इसे एएमडी के साथ काम करने के लिए प्राप्त करना चाहता हूं।

इसका लाभ यह है कि मेरी निर्भरता दो स्थानों पर परिभाषित नहीं की जाएगी। किसी .ts फ़ाइल से लाइब्रेरी का संदर्भ देना मेरे HTML में मैन्युअल रूप से निर्भरताओं की सूची को बनाए रखने के बजाय, यह सुनिश्चित करने के लिए पर्याप्त होगा।

अद्यतन: मैंने new question खोला जो मेरी सटीक स्थिति को स्पष्ट करता है। मैं अपने मूल प्रश्न के उत्तर के लिए क्रेडिट देना चाहता हूं क्योंकि मैंने सभी आवश्यक विवरण नहीं दिए हैं।

उत्तर

6

हां, टाइपस्क्रिप्ट "बाहरी" मॉड्यूल का समर्थन करता है, जो मूल रूप से प्रथम श्रेणी एएमडी या कॉमनजेएस मॉड्यूल हैं। उदाहरण के लिए:

MyLib.ts

export function foo() { return 'bar' } 

MyProj.ts

import lib = module('./MyLib.ts') 
lib.foo(); // returns bar 

"--module AMD" के साथ इस संकलित करें और आप उचित मॉड्यूल हो और वाक्य रचना आप के लिए उत्पन्न की आवश्यकता होती है जाएगा ।

+1

मॉड्यूल पुस्तकालयों के लिए बहुत अच्छा काम करते हैं जो सीधे कार्य और चर प्रदान करते हैं, लेकिन मुझे पुस्तकालयों के लिए कुछ ऐसा चाहिए जो jQuery कार्यक्षमता जैसी मौजूदा कार्यक्षमता का विस्तार करें। उन में निर्यात करने के लिए कुछ भी नहीं है, लेकिन उन्हें लोड करने से JQuery इंटरफ़ेस (jquery.d.ts में परिभाषित) पर अतिरिक्त कॉल जोड़ती हैं – dcstraw

+0

सभी निष्पक्षता में मुझे लगता है कि आपका उत्तर मेरे मूल प्रश्न पर लागू होता है। मैं बस अपना प्रश्न पूरी तरह से निर्दिष्ट करने में असफल रहा। मैं इसे उत्तर के रूप में चिह्नित करूंगा और एक स्पष्ट प्रश्न पूछूंगा। – dcstraw

1

मैंने अपने ब्लॉग पर something लिखा था। आप GitHub पर एक उदाहरण भी पा सकते हैं।

समाधान समझाया जाना लंबा है, लेकिन मूल रूप से मैं आवश्यकता के साथ shims का उपयोग करता हूं ताकि जावास्क्रिप्ट लाइब्रेरी का प्रतिनिधित्व करने वाले मॉड्यूल नाम को परिभाषित किया जा सके। मैं फिर टाइपस्क्रिप्ट कंपाइलर जावास्क्रिप्ट कोड उत्पन्न करने के लिए एक ही नाम के साथ एक टाइपस्क्रिप्ट फ़ाइल बना देता हूं जो जेएस लाइब्रेरी का उपयोग कर सकता हूं। वास्तव में इस तरह समझ में नहीं आता है, लेकिन कृपया पोस्ट पढ़ें और मुझे लगता है कि इससे अधिक समझ आएगी।

+0

उत्तर के लिए धन्यवाद। हालांकि मुझे नहीं लगता कि यह मेरी समस्या हल करता है। यह समाधान अभी भी मानता है कि लाइब्रेरी में कम-से-कम एक शीर्ष-स्तरीय कॉल है ताकि टाइपस्क्रिप्ट 'परिभाषित' कॉल में निर्भरता उत्पन्न करे। मेरे पास कोई शीर्ष-स्तरीय विधियां या चर नहीं है क्योंकि ये लाइब्रेरी प्लगइन हैं जो मौजूदा कार्यक्षमता का विस्तार करती हैं। मुझे यह भी नहीं लगता कि आपको वास्तव में अपने उदाहरण में शिम्स का उपयोग करने की आवश्यकता है। यदि आप underscore.js के बगल में एक underscore.d.ts बनाते हैं तो आप 'libs/underscore' मॉड्यूल आयात कर सकते हैं और टाइपस्क्रिप्ट .d.ts फ़ाइल का उपयोग करेगा। – dcstraw

+0

d.ts फ़ाइल का उपयोग केवल टाइपस्क्रिप्ट द्वारा किया जाता है यह निर्धारित करने के लिए कि आपका कोड सही तरीके से टाइप किया गया है या नहीं। असल में यह सिर्फ एक इंटरफेस है, इसलिए टाइपस्क्रिप्ट कंपाइलर द्वारा कोई कोड उत्पन्न नहीं होता है। आपको किसी भी तरह से जावास्क्रिप्ट लाइब्रेरी के कार्यान्वयन को अवश्य प्रदान करना होगा। एक समाधान HTML में जावास्क्रिप्ट फ़ाइल को संदर्भित करना है जैसे आप नहीं करना चाहते हैं। एक और समाधान एएमडी का उपयोग इसे असीमित रूप से लोड करने के लिए करना है। यही वह समाधान है जिसका मैं प्रस्ताव करता हूं। – Absolom

+0

समझा, लेकिन मुझे अभी भी लगता है कि शिम की वजह से आपका समाधान अनावश्यक रूप से जटिल है। – dcstraw

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