2015-03-22 10 views
24

मैं टाइपस्क्रिप्ट के साथ खेलना शुरू करता हूं जो मुझे वाकई अद्भुत लगता है। लेकिन मैं *.d.ts और *.ts के बीच के अंतर के बारे में उलझन में हूं। उनके बीच क्या अंतर है? क्या कोई मुझे उचित उदाहरण के साथ समझा सकता है?टाइपस्क्रिप्ट में * .d.ts बनाम * .ts के बीच क्या अंतर है?

उत्तर

30

टाइपप्रति परिभाषा फ़ाइल (*.d.ts)

इन फ़ाइलों टाइपप्रति में उपयोग के लिए JavaScript फ़ाइल की "आकार" वर्णन करने के लिए उपयोग किया जाता है।

function displayMessage(message) { 
    alert(message); 
} 
इस फाइल को अकेला के साथ

, मेरे टाइपप्रति कोड किसी भी सुराग इस समारोह में मौजूद है के लिए नहीं होगा:

उदाहरण के लिए, मैं निम्नलिखित जावास्क्रिप्ट (Example.js) है कहना। यह उसका नाम नहीं जान पाएगा और यह इसके पैरामीटर नहीं जान पाएगा।

declare function displayMessage(message: string); 

अब मैं टाइपप्रति में समारोह displayMessage का उपयोग बिना त्रुटियों संकलन और मैं त्रुटियों संकलन कर देंगे जब मैं उपयोग कर सकते हैं: हम इस तरह के (Example.d.ts) के रूप में एक परिभाषा फ़ाइल में यह वर्णन करके इसे ठीक कर सकते यह गलत है (उदाहरण के लिए, यदि मैंने के बजाय 2 तर्क प्रदान किए हैं तो मुझे एक त्रुटि मिलेगी)।

संक्षेप में: परिभाषा फाइलें टाइपस्क्रिप्ट में कोड को फिर से लिखने के बिना टाइपस्क्रिप्ट में मौजूदा जावास्क्रिप्ट कोड का उपयोग करने की अनुमति देती हैं।

टाइपप्रति फ़ाइल (.ts)

यह मानक फाइल एक्सटेंशन का उपयोग करने पर टाइपप्रति लेखन है। इसे जावास्क्रिप्ट में संकलित किया जाएगा।

+0

मैं उत्तर में सुधार करना चाहता हूं: यदि आप निर्यात किए गए इंटरफ़ेस ** (जो किसी भी जेएस आउटपुट नहीं करेंगे) के साथ एक फ़ाइल को परिभाषित करते हैं, तो आपको इसे '.d.ts' फ़ाइल में लिखना चाहिए ** ** । इस तरह, मॉड्यूल उत्पन्न करते समय इसे कंपाइलर द्वारा छोड़ा जाएगा। – Ciberman

12

* .d.ts फ़ाइल में अनुमत कुछ भी * .ts फ़ाइल में दिखाई दे सकता है, लेकिन विपरीत नहीं। तो * .d.ts टाइपस्क्रिप्ट की विशेषताओं का सबसेट देता है।

ए * .d.ts फ़ाइल केवल टाइपस्क्रिप्ट कोड रखने की अनुमति है जो आउटपुट में कोई जावास्क्रिप्ट कोड उत्पन्न नहीं करता है। यदि आप टाइपस्क्रिप्ट की किसी भी सुविधा का उपयोग करने का प्रयास करते हैं जो जावास्क्रिप्ट उत्पन्न करेगा, तो आपको एक त्रुटि मिलेगी।

इंटरफेस की अनुमति है, क्योंकि वे संकलन के बाद पूरी तरह से गायब हो जाते हैं।

कॉन्स एनम्स (1.4 में जोड़ा गया) भी सामान्य enums के विपरीत, आउटपुट जावास्क्रिप्ट में एक वस्तु उत्पन्न करता है।

शीर्ष स्तर के वर्ग, चर, मॉड्यूल और फ़ंक्शंस declare के साथ उपसर्ग किए जाने चाहिए। अंदर यह इसलिए भी शुद्ध घोषणा है अक्सर आप एक शीर्ष स्तर declare module और उत्पाद ही दिखाई देंगे:

declare module Something { 
    var x; 
} 

वे सिर्फ जावास्क्रिप्ट में लिखा कोड के लिए एक टाइपप्रति इंटरफ़ेस उजागर से अधिक के लिए उपयोगी होते हैं। आप उन सामान्य इंटरफेस का एक सेट घोषित करने के लिए भी उनका उपयोग कर सकते हैं जिनका व्यापक रूप से आपके कोड में उपयोग किया जाता है, इसलिए उन इंटरफेस की दृश्यता प्राप्त करने के लिए require एक विशिष्ट भौतिक मॉड्यूल आवश्यक नहीं है।

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