परिचय: एक प्रकार क्यों उबाऊ है?
\n\nकल्पना करें: आप TypeScript में लिख रहे हैं और अचानक ऐसी स्थिति का सामना करते हैं जहाँ ऐरे को विभिन्न प्रकारों का डेटा संग्रहीत करना होता है। उदाहरण के लिए, एक सूची जहाँ प्रत्येक तत्व या तो string है या number। या नाम (स्ट्रिंग) और आयु (संख्या) का एक टपल।
कई शुरुआती (और केवल वे ही नहीं) प्रश्न पूछते हैं: "TypeScript में कई प्रकारों वाला ऐरे कैसे घोषित करें?" इस प्रश्न ने Stack Overflow पर हज़ारों व्यूज़ प्राप्त किए हैं - और यह व्यर्थ नहीं है। TypeScript प्रकारों के मामले में सख्त है, लेकिन साथ ही ऐसे मामलों के लिए लचीले उपकरण प्रदान करता है।
\n\nइस लेख में हम मिश्रित प्रकारों के ऐरे के साथ काम करने के सभी तरीकों पर चर्चा करेंगे: सरल यूनियन-प्रकारों से लेकर टपल और जेनेरिक तक। आप सीखेंगे कि कब किस दृष्टिकोण का उपयोग करना है, और any के जाल में कैसे नहीं फँसना है।
1. यूनियन टाइप: सबसे सरल तरीका
\n\nसबसे स्पष्ट विकल्प यूनियन टाइप (प्रकारों का संघ) का उपयोग करना है। यह तब होता है जब आप कहते हैं: "ऐरे में string या number प्रकार के तत्व हो सकते हैं"।
// ऐरे जिसमें स्ट्रिंग या संख्याएँ हो सकती हैं\nconst mixedArray: (string | number)[] = ['hello', 42, 'world', 100];\n\n// वैकल्पिक लेखन (समतुल्य)\nconst mixedArray2: Array<string | number> = ['hello', 42, 'world', 100];\n\nयहाँ (string | number)[] का अर्थ है: "एक ऐरे जिसका प्रत्येक तत्व स्ट्रिंग या संख्या है"। TypeScript जाँच करेगा कि आप इसमें बूलियन मान या ऑब्जेक्ट जोड़ने का प्रयास न करें।
यह कब सुविधाजनक है?
\n- \n
- जब तत्वों का क्रम महत्वपूर्ण नहीं है, बल्कि केवल अनुमत प्रकारों का सेट महत्वपूर्ण है। \n
- जब आप किसी API के साथ काम कर रहे हैं जो विषम डेटा का ऐरे लौटाता है। \n
- जब आप ID (संख्या) और नाम (स्ट्रिंग) की सूची एक ही ऐरे में संग्रहीत कर रहे हैं। \n
छिपा हुआ खतरा
\nयूनियन-प्रकारों का उपयोग करते समय, आप गारंटी नहीं दे सकते कि पहली स्थिति में स्ट्रिंग होगी और दूसरी में संख्या। टाइपिंग केवल यह कहती है: "ऐरे में स्ट्रिंग और संख्याएँ हैं, लेकिन किस क्रम में - अज्ञात"।
\n\nconst arr: (string | number)[] = [1, 'hello'];\n// TypeScript नहीं जानता: arr[0] — number है या string?\nconst first = arr[0]; // प्रकार: string | number\n// इसे संख्या के रूप में उपयोग करने के लिए, प्रकार को संकीर्ण करना होगा:\nif (typeof first === 'number') {\n console.log(first.toFixed(2));\n}\n\n2. टपल: जब क्रम महत्वपूर्ण है
\n\nयदि आपको ऐरे की निश्चित संरचना चाहिए - उदाहरण के लिए, पहले स्ट्रिंग, दूसरे में संख्या, तीसरे में बूलियन मान - तो टपल (tuple types) का उपयोग करें।
\n\n// टपल: [स्ट्रिंग, संख्या, बूलियन]\nconst person: [string, number, boolean] = ['Alice', 30, true];\n\n// लेबल वाला टपल - अधिक पठनीय\nconst product: [name: string, price: number, inStock: boolean] = ['Laptop', 1200, true];\n\nटपल तत्वों की संख्या और प्रत्येक स्थिति पर प्रकार को सख्ती से निर्धारित करते हैं। यदि आप गलत प्रकार का मान निर्दिष्ट करने या अतिरिक्त तत्व जोड़ने का प्रयास करते हैं - TypeScript एक त्रुटि देगा।
\n\nटपल में Rest-तत्व
\nTypeScript 4.0 से टपल में rest-तत्व निर्दिष्ट करने की सुविधा आई। यह तब सुविधाजनक है जब संरचना का एक भाग निश्चित है और शेष परिवर्तनशील है:
\n\n// पहला तत्व — स्ट्रिंग, शेष — संख्याएँ\nconst data: [string, ...number[]] = ['scores', 95, 87, 92];\n\n// संयोजन किया जा सकता है\nconst logEntry: [timestamp: Date, ...messages: string[]] = [new Date(), 'info', 'user logged in'];\n\n3. जटिल ऐरे के लिए Type Alias
\n\nजब ऐरे की संरचना जटिल हो जाती है, तो प्रकार को एक अलग alias (उपनाम) में रखना सुविधाजनक होता है। इससे कोड की पठनीयता में सुधार होता है और प्रकार को पुनः उपयोग करने की अनुमति मिलती है।
\n\ntype UserEntry = [id: number, name: string, email: string, isActive: boolean];\n\nconst users: UserE