TypeScript Enum में मान क्यों जाँचें? व्यवहार में एक वास्तविक उदाहरण
\n\nकल्पना करें: आप TypeScript के साथ Node.js पर बैकएंड लिख रहे हैं। क्लाइंट ऑर्डर की स्थिति भेजता है — एक स्ट्रिंग "shipped"। आपके पास विकल्पों के साथ एक enum OrderStatus है: Pending, Processing, Shipped, Delivered। लेकिन अचानक "CANCELLED" या "unknown" आता है। क्या करें? सही — TypeScript enum में मान मौजूद है या नहीं, इसकी जाँच करें।
यह कार्य Stack Overflow पर सबसे आम में से एक है (हज़ारों व्यूज़)। और यह कोई आश्चर्य की बात नहीं है: TypeScript में enum केवल स्थिरांकों का एक सेट नहीं है, बल्कि संख्यात्मक और स्ट्रिंग वेरिएंट वाला एक चालाक प्राणी है। इस गाइड में, हम enum में मान की उपस्थिति की जाँच करने के सभी तरीकों पर चर्चा करेंगे, सरल से लेकर उन्नत तक, कोड उदाहरणों और स्पष्टीकरणों के साथ।
\n\nयदि आप अभी TypeScript सीखना शुरू कर रहे हैं या अपने ज्ञान को गहरा करना चाहते हैं — यह लेख आपके लिए है। चलिए शुरू करते हैं!
\n\nTypeScript में Enum क्या है? संक्षिप्त परिचय
\n\nEnum (गणना) नामित स्थिरांकों का एक सेट परिभाषित करने का एक तरीका है। TypeScript में दो प्रकार के enum होते हैं:
\n\n- \n
- संख्यात्मक enum — मान स्वचालित रूप से बढ़ते हैं (0, 1, 2...)। \n
- स्ट्रिंग enum — प्रत्येक सदस्य को स्पष्ट रूप से एक स्ट्रिंग सौंपी जाती है। \n
संख्यात्मक enum का उदाहरण:
\n\nenum Direction {\n Up, // 0\n Down, // 1\n Left, // 2\n Right // 3\n}\n\nस्ट्रिंग enum का उदाहरण:
\n\nenum Status {\n Active = "ACTIVE",\n Inactive = "INACTIVE",\n Pending = "PENDING"\n}\n\nमान क्यों जाँचें? क्योंकि बाहरी स्रोतों (API, फॉर्म, डेटाबेस) से डेटा कुछ भी हो सकता है। जाँच के बिना, आपको undefined या रनटाइम त्रुटि मिलने का जोखिम है।
तरीका 1. क्लासिक: Object.values() + includes()
\n\nसबसे लोकप्रिय और पढ़ने योग्य तरीका — enum को मानों की एक सरणी में बदलना और includes() के साथ उपस्थिति की जाँच करना।
स्ट्रिंग enum के लिए:
\n\nenum Color {\n Red = "RED",\n Green = "GREEN",\n Blue = "BLUE"\n}\n\nfunction isColor(value: string): boolean {\n return Object.values(Color).includes(value as Color);\n}\n\nconsole.log(isColor("RED")); // true\nconsole.log(isColor("YELLOW")); // false\n\nसंख्यात्मक enum के लिए — एक तरकीब! Object.values() रिवर्स मैपिंग (कुंजियाँ और मान) लौटाता है। इसलिए केवल संख्याओं को फ़िल्टर करना होगा:
enum NumberEnum {\n A = 1,\n B = 2,\n C = 3\n}\n\nfunction isNumberEnumValue(value: number): boolean {\n return Object.values(NumberEnum).filter(v => typeof v === 'number').includes(value);\n}\n\nconsole.log(isNumberEnumValue(2)); // true\nconsole.log(isNumberEnumValue(5)); // false\n\nयह दृष्टिकोण सार्वभौमिक है, लेकिन संख्यात्मक enum के साथ सावधानी की आवश्यकता है। लाभ: सरल और स्पष्ट। नुकसान: फ़िल्टरिंग के बारे में याद रखना होगा।
\n\nतरीका 2. Type Guard: enum कुंजियों के माध्यम से जाँच
\n\nयदि आपको केवल मान की जाँच नहीं करनी है, बल्कि टाइप गारंटी भी प्राप्त करनी है, तो type guard का उपयोग करें। यह विधि API के साथ काम करते समय विशेष रूप से उपयोगी है, जहाँ आप टाइप को संकीर्ण करना चाहते हैं।
\n\nenum UserRole {\n Admin = "admin",\n User = "user",\n Guest = "guest"\n}\n\nfunction isUserRole(value: string): value is UserRole {\n return Object.values(UserRole).includes(value as UserRole);\n}\n\nfunction processRole(role: string) {\n if (isUserRole(role)) {\n // TypeScript जानता है कि role — UserRole है\n console.log(`भूमिका: ${role}`);\n } else {\n console.log("अज्ञात भूमिका");\n }\n}\n\nprocessRole("admin"); // भूमिका: admin\nprocessRole("moderator"); // अज्ञात भूमिका\n\nयह दृष्टिकोण टाइप सुरक्षा प्रदान करता है और कोड में जाँचों की संख्या कम करता है। गंभीर प्रोजेक्ट्स के लिए अनुशंसित।
\n\n