TypeScript में कॉन्स्टेंट: क्लासेस में घोषणा और उपयोग की पूरी गाइड

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

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

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

TypeScript क्लासेस में कॉन्स्टेंट: शुरुआत से विशेषज्ञ तक

\n\n

क्या आपने कभी TypeScript में कोड लिखते हुए महसूस किया है: "मैं इस 'ADMIN' स्ट्रिंग का इस्तेमाल दस जगहों पर कर रहा हूँ, और अगर मैं गलती से टाइप कर दूँ तो कंपाइलर चुप रहेगा"? यह एक जानी-पहचानी समस्या है। या इससे भी बुरा, जब टीम का कोई सदस्य रनटाइम में कॉन्स्टेंट की वैल्यू बदल देता है, और आप एक घंटा डीबगिंग में बिता देते हैं कि आखिर सब कुछ क्यों टूट गया।

\n\n

आपका स्वागत है TypeScript क्लासेस में कॉन्स्टेंट की दुनिया में। यह सिर्फ सिंटैक्स शुगर नहीं है - यह एक साफ, अनुमानित और सुरक्षित आर्किटेक्चर की नींव है। इस लेख में, हम TypeScript क्लासेस में कॉन्स्टेंट घोषित करने के सभी तरीकों को कवर करेंगे: सरल readonly से लेकर as const और जेनेरिक्स जैसी उन्नत तकनीकों तक। चलिए शुरू करते हैं!

\n\n

क्लासेस में कॉन्स्टेंट क्यों महत्वपूर्ण हैं?

\n\n

कल्पना करें कि आप एक ऑनलाइन शॉपिंग ऐप बना रहे हैं। आपके पास एक Order क्लास है, और उसमें स्टेटस हैं: "pending", "shipped", "delivered"। अगर आप इन स्ट्रिंग्स को पूरे कोड में बिखेर देंगे, तो देर-सबेर कोई "PENDING" बड़े अक्षरों में लिख देगा - और बग पक्का है। TypeScript क्लास कॉन्स्टेंट इस समस्या को हमेशा के लिए हल कर देते हैं।

\n\n
    \n
  • टाइप सुरक्षा: कंपाइलर "pendingg" को वहाँ पास नहीं होने देगा जहाँ "pending" चाहिए।
  • \n
  • पढ़ने में आसानी: OrderStatus.Pending सिर्फ एक स्ट्रिंग से ज्यादा समझ में आता है।
  • \n
  • रखरखाव: एक जगह वैल्यू बदलने से वह हर जगह बदल जाती है।
  • \n
\n\n

तरीका #1: readonly - बेसिक लेकिन जरूरी

\n\n

सबसे आसान तरीका है readonly मॉडिफायर का उपयोग करना। यह इनिशियलाइज़ेशन के बाद फील्ड को बदलने से रोकता है।

\n\n
class AppConfig {\n    readonly API_URL: string = 'https://api.example.com';\n    readonly MAX_RETRIES: number = 3;\n}\n\nconst config = new AppConfig();\nconsole.log(config.API_URL); // 'https://api.example.com'\n// config.API_URL = 'new-url'; // त्रुटि! 'API_URL' को असाइन नहीं कर सकते क्योंकि यह एक रीड-ओनली प्रॉपर्टी है।
\n\n

लेकिन एक पेंच है: readonly केवल TypeScript स्तर पर काम करता है। कंपाइल किए गए JavaScript में, इन फील्ड्स को अभी भी बदला जा सकता है। पूर्ण सुरक्षा के लिए Object.freeze या # (प्राइवेट फील्ड) का उपयोग करें।

\n\n

तरीका #2: static readonly - कॉन्स्टेंट का राजा

\n\n

अगर कॉन्स्टेंट किसी विशेष इंस्टेंस से बंधा नहीं है (और 99% मामलों में ऐसा ही होता है), तो static readonly का उपयोग करें। यह क्लासिक class constant typescript पैटर्न है।

\n\n
class MathConstants {\n    static readonly PI: number = 3.14159;\n    static readonly E: number = 2.71828;\n    static readonly GOLDEN_RATIO: number = 1.61803;\n}\n\n// बिना इंस्टेंस बनाए एक्सेस\nconsole.log(MathConstants.PI); // 3.14159\n// MathConstants.PI = 3.14; // त्रुटि!
\n\n

यह तरीका कॉन्फ़िगरेशन, गणितीय कॉन्स्टेंट, स्टेटस और किसी भी ऐसी वैल्यू के लिए आदर्श है जो बदलनी नहीं चाहिए।

\n\n

तरीका #3: enum - जब कॉन्स्टेंट की भीड़ हो

\n\n

अगर आपके पास संबंधित कॉन्स्टेंट का एक समूह है (जैसे ऑर्डर स्टेटस), तो enum आपका सबसे अच्छा दोस्त है। यह वैल्यू का एक नामांकित सेट बनाता है।

\n\n
enum OrderStatus {\n    Pending = 'pending',\n    Shipped = 'shipped',\n    Delivered = 'delivered',\n    Cancelled = 'cancelled'\n}\n\nclass Order {\n    constructor(public status: OrderStatus) {}\n}\n\nconst order = new Order(OrderStatus.Pending);\nconsole.log(order.status); // 'pending'\n\n// order.status = 'pendingg'; // त्रुटि! टाइप '"pendingg"' टाइप 'OrderStatus' को असाइन नहीं किया जा सकता
\n\n

सलाह: अगर आप स्ट्रिंग enum का उपयोग करते हैं (जैसे उदाहरण में), तो वे रनटाइम में पढ़ने योग्य वैल्यू देते हैं। न्यूमेरिक enum तेज़ होते हैं, लेकिन उन्हें डीबग करना मुश्किल होता है।

\n\n

तरीका #4: as const - अधिकतम सख्ती के लिए

\n\n

कभी-कभी आप चाहते हैं कि कोई ऑब्जेक्ट या ऐरे कॉन्स्टेंट बन जाएं।

ब्लॉग

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