interfaceतब होता है जब आप किसी वस्तु के आकार का वर्णन करना चाहते हैं। इंटरफेस के लिए कोई कोड जनरेशन नहीं है - वे पूरी तरह से टाइप सिस्टम में एक कलाकृति हैं। आपको क्लास के लिए कोड जेनरेशन में कोई अंतर नहीं दिखेगा, यह इस बात पर निर्भर करता है कि उसका कोई implementsक्लॉज है या नहीं ।
declare classजब आप किसी मौजूदा वर्ग (आमतौर पर एक टाइपस्क्रिप्ट क्लास, लेकिन हमेशा नहीं) का वर्णन करना चाहते हैं , तो यह बाहरी रूप से मौजूद होने वाला है (उदाहरण के लिए, आपके पास दो .ts फ़ाइलें हैं जो दो .js फ़ाइलों के लिए संकलित हैं और दोनों scriptटैग के माध्यम से शामिल हैं। एक वेबपेज में) यदि आपको एक classउपयोग से विरासत में मिला है extends(चाहे आधार प्रकार एक declare classया एक नियमित था class), कंपाइलर प्रोटोटाइप श्रृंखला को आगे बढ़ाने के लिए सभी कोड उत्पन्न करने जा रहा है और निर्माणकर्ताओं को अग्रेषित कर रहा है और क्या नहीं।
यदि आप एक से विरासत की कोशिश करते हैं declare class उस जो एक इंटरफ़ेस होना चाहिए था, तो आपको रनटाइम त्रुटि होने वाली है क्योंकि वह उत्पन्न कोड किसी रनटाइम मैनिफ़ेस्ट वाली ऑब्जेक्ट का जिक्र होगा।
इसके विपरीत, यदि आप बस implementएक इंटरफ़ेस है जो एक होना चाहिए थाdeclare class , तो आप सभी सदस्यों को स्वयं को फिर से लागू करने जा रहे हैं और किसी भी कोड का लाभ लेने के लिए आधार-क्लास और कार्यों से फिर से उपयोग नहीं करेंगे। रनटाइम पर प्रोटोटाइप श्रृंखला की जाँच करें कि वास्तव में आधार वर्ग का एक उदाहरण नहीं होने के कारण आपकी वस्तु को अस्वीकार कर दिया जाएगा।
वास्तव में शून्य होने के लिए, यदि आपके पास C ++ पृष्ठभूमि है, तो आप मोटे interfaceतौर पर typedefऔर के declare classरूप में सोच सकते हैंextern एक निर्माता की घोषणा है कि सख्ती से इस संकलन इकाई में एक परिभाषा का अभाव है।
शुद्ध खपत पक्ष (अनिवार्य कोड लिखना, नए प्रकार नहीं जोड़ना) से, केवल एक अंतर है interfaceऔर declare classयह है कि आप newएक इंटरफ़ेस नहीं कर सकते । हालाँकि, यदि आप एक नए में इन प्रकारों में से एक extend/ करने का इरादा रखते हैं, तो आपको पूरी तरह से और के बीच सही ढंग से चुना जाना चाहिए । उनमें से केवल एक ही काम करेगा।implementclassinterfacedeclare class
दो नियम जो आपकी अच्छी सेवा करेंगे:
- क्या कंस्ट्रक्टर फ़ंक्शन के साथ संरेखित प्रकार का नाम है (कुछ के साथ अदृश्य
new) जो वास्तव में रनटाइम पर मौजूद है (उदाहरण के Dateलिए, लेकिन JQueryStaticऐसा नहीं है)? यदि नहीं , तो आप निश्चित रूप से चाहते हैंinterface
- क्या मैं किसी अन्य टाइपस्क्रिप्ट फ़ाइल से संकलित वर्ग के साथ काम कर रहा हूँ, या कुछ समान रूप से? यदि हाँ , का उपयोग करें
declare class