TypeScript में शब्दकोश: अव्यवस्था से व्यवस्था तक (कोड के साथ पूर्ण गाइड)
\n\nकल्पना करें कि आप अंग्रेजी सीखने के लिए एक ऐप लिख रहे हैं। आपको शब्दों के अनुवाद संग्रहीत करने की आवश्यकता है: "cat" → "बिल्ली", "dog" → "कुत्ता"। इन डेटा को सबसे अच्छे तरीके से कैसे व्यवस्थित करें? बिल्कुल, शब्दकोश (Dictionary) का उपयोग करें — एक डेटा संरचना जहां प्रत्येक कुंजी अद्वितीय होती है और एक मान से जुड़ी होती है।
JavaScript में, शब्दकोश सामान्य ऑब्जेक्ट या Map के माध्यम से कार्यान्वित किए जाते हैं। लेकिन TypeScript शक्तिशाली टाइपिंग जोड़ता है, अव्यवस्थित संग्रह को सख्त, पूर्वानुमानित संरचनाओं में बदल देता है। इस लेख में, हम सरल से जटिल तक TypeScript में Dictionary की घोषणा और आरंभीकरण पर चर्चा करेंगे। आप सीखेंगे कि सामान्य गलतियों से कैसे बचें और ऐसा कोड लिखें जो पूर्वानुमानित रूप से काम करे।
TypeScript में Dictionary क्या है? (और यह सिर्फ एक ऑब्जेक्ट क्यों नहीं है)
\n\nप्रोग्रामिंग में Dictionary (शब्दकोश) — यह "कुंजी-मान" जोड़ियों का एक संग्रह है। TypeScript में, आप इसे तीन मुख्य तरीकों से बना सकते हैं:
\n\n- \n
- इंडेक्स सिग्नेचर वाला ऑब्जेक्ट (
{ [key: string]: T }) \n - Record — उपयोगिता प्रकार \n
- Map — अंतर्निहित ES6 क्लास \n
प्रत्येक दृष्टिकोण के अपने फायदे और बारीकियां हैं। आइए उन्हें वास्तविक उदाहरणों पर समझते हैं।
\n\nतरीका 1: इंडेक्स सिग्नेचर के साथ क्लासिक ऑब्जेक्ट
\n\nTypeScript में शब्दकोश घोषित करने का सबसे लोकप्रिय तरीका इंडेक्स सिग्नेचर का उपयोग करना है। यह कंपाइलर को बताता है: "ऑब्जेक्ट में एक निश्चित प्रकार की कुंजियों के साथ कोई भी संख्या में गुण हो सकते हैं"।
\n\n// शब्दकोश प्रकार घोषित करें, जहां कुंजी — स्ट्रिंग, मान — संख्या\ninterface DictionaryNumber {\n [key: string]: number;\n}\n\n// आरंभीकरण\nconst ages: DictionaryNumber = {\n "अन्ना": 25,\n "पीटर": 30,\n "ऐलेना": 28\n};\n\n// नया तत्व जोड़ना\nages["ओल्गा"] = 35;\n\nconsole.log(ages["अन्ना"]); // 25\n\nमहत्वपूर्ण: TypeScript आवश्यकता है कि सभी मान घोषित प्रकार के अनुरूप हों। स्ट्रिंग जोड़ने का प्रयास संकलन त्रुटि उत्पन्न करेगा:
\n\n// त्रुटि! प्रकार 'string' को प्रकार 'number' को असाइन नहीं किया जा सकता\nages["ओल्गा"] = "पैंतीस";\n\nइस दृष्टिकोण का उपयोग कब करें?
\n- \n
- जब एक सरल और तेज़ शब्दकोश की आवश्यकता हो \n
- जब कुंजियाँ स्ट्रिंग या संख्याएँ हों \n
- छोटे संग्रहों के लिए (1000 तत्वों तक) \n
तरीका 2: Record — सुरुचिपूर्ण सिंटैक्स
\n\nTypeScript एक अंतर्निहित उपयोगिता प्रकार Record<K, V> प्रदान करता है। यह एक ऑब्जेक्ट प्रकार बनाता है जहां सभी कुंजियों का प्रकार K और मानों का प्रकार V होता है।
// एक पंक्ति में घोषणा और आरंभीकरण\nconst grades: Record<string, number> = {\n "गणित": 5,\n "भौतिकी": 4,\n "इतिहास": 5\n};\n\n// कुंजियों के लिए enum का उपयोग किया जा सकता है\nenum Subject {\n Math = "math",\n Physics = "physics",\n History = "history"\n}\n\nconst gradesBySubject: Record<Subject, number> = {\n [Subject.Math]: 5,\n [Subject.Physics]: 4,\n [Subject.History]: 5\n};\n\nRecord के लाभ:
\n- \n
- संक्षिप्त सिंटैक्स \n
- अच्छी पठनीयता \n
- कुंजियों के लिए union-प्रकारों का समर्थन \n
तरीका 3: Map — उन्नत परिदृश्यों के लिए
\n\nES6 से Map क्लास — यह अतिरिक्त क्षमताओं के साथ एक पूर्ण "कुंजी-मान" संग्रह है। TypeScript में, इसे जेनेरिक के माध्यम से टाइप किया जाता है:
// Map की घोषणा\nconst userRoles: Map<string, string> = new Map([\n ["admin", "प्रशासक"],\n ["user", "उपयोगकर्ता"],\n ["guest", "अतिथि"]\n]);\n\n// जोड़ना\nuserRoles.set("moderator", "मॉडरेटर");\n\n// प्राप्त करना\nconsole.log(userRoles.get("admin")); // "प्रशासक"\n\n// उपस्थिति की जाँच\nif (userRoles.has("user")) {\n console.log("भूमिका मौजूद है");\n}\n\n// और