2016-01-26 4 views
42

हमें कथन में declare क्यों चाहिए?'निर्यात घोषणा वर्ग क्रियाओं' में 'घोषित' क्या करता है?

export declare class Actions { 
    ... 
} 
+1

संभावित डुप्लिकेट [टाइपस्क्रिप्ट में "कक्षा घोषित करें" और "इंटरफेस" के बीच क्या अंतर है) (http://stackoverflow.com/questions/14345485/whats-the-difference-between-declare-class-and-interface -इन-टाइपस्क्रिप्ट) – thanksd

उत्तर

47

पाया मैं के लिए क्या देख रहा था:

प्रचार बनाम वर

var एक नया वेरिएबल पैदा करता है। declare टाइपस्क्रिप्ट को बताने के लिए प्रयोग किया जाता है कि चर कहीं और बनाया गया है। यदि आप declare का उपयोग करते हैं, तो जेनरेट की गई जावास्क्रिप्ट में कुछ भी जोड़ा नहीं जाता है - यह केवल कंपाइलर के लिए एक संकेत है।

उदाहरण के लिए, यदि आप किसी बाहरी स्क्रिप्ट कि var externalModule को परिभाषित करता है का उपयोग करें, आप declare var externalModule का प्रयोग करेंगे टाइपप्रति संकलक कि externalModule पहले से ही

+0

मेरे पास एक बाहरी जेएस के साथ एक समान परिदृश्य है जो दूसरों के बीच एक चर 'बाहरी मॉड्यूल' को परिभाषित करता है। रनटाइम पर 'बाहरी मॉड्यूल' को अपरिभाषित करने का कारण क्या हो सकता है लेकिन कुछ अन्य चर नहीं? –

19

स्थापित किया गया है यह समझने के लिए करने के लिए संकेत करने के लिए, आपको पहले समझना होगा "घोषित "कीवर्ड।

टाइपप्रति घोषित कीवर्ड चर है कि एक टाइपप्रति फ़ाइल से उत्पन्न हो सकता है की घोषणा करने के लिए किया जाता है:

यहाँ Gil Fink's Blog से एक अच्छी व्याख्या है।

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

declare var myLibrary; 

प्रकार है कि टाइपप्रति क्रम MyLibrary चर करने के लिए दे देंगे किसी भी प्रकार है। यहां समस्या यह है कि आपके पास उस चर के लिए डिज़ाइन समय में इंटेलिजेंस नहीं होगा लेकिन आप अपने कोड में लाइब्रेरी का उपयोग करने में सक्षम होंगे। घोषित कीवर्ड का उपयोग किए बिना समान व्यवहार करने के लिए एक अन्य विकल्प बस किसी भी प्रकार के साथ एक चर का उपयोग कर रहा है:

var myLibrary: any; 

कोड उदाहरण के दोनों एक ही जावास्क्रिप्ट उत्पादन में परिणाम होगा लेकिन घोषित उदाहरण अधिक पठनीय है और व्यक्त करता है एक परिवेश घोषणा।


तो तुम्हारे जाने के बाद "घोषित" कीवर्ड को समझते हैं, वापस भी आप पाते हैं

export declare class Action{ 
... 
} 

वर्ग की वास्तविक कार्यान्वयन शायद कहीं और — शायद एक .js फ़ाइल में है पर जाएँ।

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