TypeScript में स्ट्रिंग को enum में कैसे बदलें: पूर्ण ट्यूटोरियल

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में स्ट्रिंग को enum में कैसे बदलें: चरण-दर-चरण मार्गदर्शिका

\n\n

क्या आपने कभी ऐसी स्थिति का सामना किया है जब API एक स्ट्रिंग लौटाता है, और आपका TypeScript मॉडल enum के माध्यम से सख्ती से टाइप किया गया है? या हो सकता है, आप localStorage से मान प्राप्त कर रहे हों और इसे सुरक्षित रूप से एनुम में बदलना चाहते हों? यदि हाँ, तो आप सही जगह पर हैं। इस लेख में, हम TypeScript में स्ट्रिंग को enum में बदलने का तरीका समझेंगे - सरल समाधानों से लेकर त्रुटि प्रबंधन वाली उन्नत तकनीकों तक।

\n\n

यह विषय Stack Overflow पर सबसे लोकप्रिय विषयों में से एक है (हज़ारों व्यूज़!), और यह कोई संयोग नहीं है। अनुभवी डेवलपर्स भी अक्सर स्ट्रिंग्स को सुरक्षित रूप से एनुम में बदलने में भ्रमित हो जाते हैं। आइए इसे विस्तार से समझते हैं।

\n\n

TypeScript में enum क्या है और इसे क्यों बदलें?

\n\n

Enum (एनुमरेशन) TypeScript का एक शक्तिशाली उपकरण है जो आपको नामित स्थिरांकों का एक सेट परिभाषित करने की अनुमति देता है। 'active' या 'pending' जैसी "मैजिक स्ट्रिंग्स" का उपयोग करने के बजाय, आप एक enum परिभाषित करते हैं और टाइप किए गए मानों के साथ काम करते हैं। लेकिन यहाँ एक समस्या है: बाहरी स्रोतों (API, फॉर्म, कॉन्फ़िगरेशन फ़ाइलें) से डेटा अक्सर सामान्य स्ट्रिंग्स के रूप में आता है। और यहाँ सवाल उठता है: TypeScript में स्ट्रिंग को enum में सुरक्षित और सुरुचिपूर्ण ढंग से कैसे बदलें?

\n\n
// enum का उदाहरण\nenum Status {\n  Active = 'active',\n  Inactive = 'inactive',\n  Pending = 'pending'\n}\n\n// API से स्ट्रिंग\nconst apiStatus: string = 'active';\n// Status.Active कैसे प्राप्त करें? 🤔
\n\n

विधि 1: प्रत्यक्ष प्रकार रूपांतरण (Type Assertion)

\n\n

सबसे सरल, लेकिन सबसे खतरनाक तरीका। आप बस TypeScript से कहते हैं: "मुझ पर विश्वास करो, यह सही मान है।"

\n\n
const status = apiStatus as Status;\n// या\nconst status = <Status>apiStatus;
\n\n

लाभ: न्यूनतम कोड। नुकसान: यदि स्ट्रिंग enum के किसी भी मान से मेल नहीं खाती है, तो आपको बिना किसी चेतावनी के undefined मिलेगा। TypeScript कोई त्रुटि नहीं देगा, और आपको समस्या के बारे में केवल runtime में पता चलेगा जब कुछ टूटेगा।

\n\n

इस विधि का उपयोग केवल तभी करें जब आप डेटा स्रोत के बारे में पूरी तरह से आश्वस्त हों। प्रोडक्शन के लिए अनुशंसित नहीं है।

\n\n

विधि 2: कस्टम यूटिलिटी फ़ंक्शन का उपयोग करना

\n\n

यह सरलता और सुरक्षा के बीच का सुनहरा मध्य मार्ग है। आइए एक फ़ंक्शन लिखें जो एक स्ट्रिंग लेता है और जाँचता है कि enum में ऐसा मान मौजूद है या नहीं।

\n\n
function stringToEnum<T>(value: string, enumObject: T): T[keyof T] | undefined {\n  // जाँचें कि क्या मान enum में मौजूद है\n  const enumValues = Object.values(enumObject) as string[];\n  if (enumValues.includes(value)) {\n    return value as unknown as T[keyof T];\n  }\n  return undefined;\n}\n\n// उपयोग\nconst status = stringToEnum(apiStatus, Status);\nif (status) {\n  console.log(status); // Status.Active\n} else {\n  console.error('अमान्य स्थिति मान');\n}
\n\n

यह फ़ंक्शन TypeScript में स्ट्रिंग को सुरक्षित रूप से enum में बदलता है। यदि मान नहीं मिलता है, तो यह undefined लौटाता है, और आप इस स्थिति को संभाल सकते हैं। जेनेरिक <T> पर ध्यान दें - यह फ़ंक्शन को किसी भी enum के लिए सार्वभौमिक बनाता है।

\n\n

विधि 3: त्रुटि फेंकने के साथ सख्त दृष्टिकोण

\n\n

कभी-कभी undefined वह नहीं होता जो आपको चाहिए। समस्या को जल्दी से पहचानने के लिए स्पष्ट रूप से त्रुटि फेंकना बेहतर है।

\n\n
function stringToEnumStrict<T>(value: string, enumObject: T): T[keyof T] {\n  const enumValues = Object.values(enumObject) as string[];\n  if (enumValues.includes(value)) {\n    return value as unknown as T[keyof T];\n  }\n  throw new Error(`मान "${value}" enum में नहीं मिला`);\n}\n\n// उपयोग\ntry {\n  const status = stringToEnumStrict(apiStatus, Status);\n  // status के साथ काम करें\n} catch (error) {\n  console.error(error.message);\n  // Sentry या किसी अन्य मॉनिटरिंग सिस्टम में त्रुटि लॉग करें\n}

                
                

ब्लॉग

पुस्तक अनुशंसाएँ