TypeScript में «as const»: कोड को बेवकूफी भरी गलतियों से बचाना

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

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

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

परिचय: आपका TypeScript कोड अजीब व्यवहार क्यों करता है?

\n

क्या आपने कभी TypeScript में कुछ इस तरह लिखा है:

\n
const direction = 'left';\n// ... और फिर TypeScript ने कहा कि यह string है, 'left' नहीं?
\n

परिचित लगता है? यह सबसे आम जालों में से एक है जिसमें अनुभवी डेवलपर भी फंस जाते हैं। आज हम एक शक्तिशाली उपकरण पर चर्चा करेंगे जो इस समस्या को हमेशा के लिए हल करता है — as const।

\n

इस लेख का विषय Stack Overflow पर एक वास्तविक प्रश्न पर आधारित है, जिसे हज़ारों बार देखा गया है: "TypeScript में "as const" का क्या अर्थ है और इसका उपयोग क्या है?"। हम इस प्रश्न को शैक्षिक सामग्री के लिए अनुकूलित करेंगे, वास्तविक उदाहरण जोड़ेंगे और दिखाएंगे कि कैसे TypeScript में as const बेवकूफी भरी गलतियों से बचने में मदद करता है।

\n

तैयार हैं? चलिए शुरू करते हैं!

\n\n
\n\n

सरल शब्दों में TypeScript में as const क्या है?

\n

as const — एक विशेष निर्माण (const assertion) है जो TypeScript से कहता है: "अरे, प्रकार का विस्तार मत करो! इस मान को एक शाब्दिक के रूप में फ्रीज़ कर दो।" दूसरे शब्दों में, आप TypeScript को अधिक सामान्य प्रकार (जैसे, string) निकालने से रोकते हैं और इसे सटीक मान का उपयोग करने के लिए मजबूर करते हैं।

\n\n

as const के बिना समस्या

\n

एक सरल उदाहरण देखें:

\n
// as const के बिना\nconst role = 'admin'; // TypeScript प्रकार निकालेगा: 'admin' (क्योंकि const)\nlet userRole = 'admin'; // TypeScript प्रकार निकालेगा: string (क्योंकि let)\n\n// और अब एक सरणी:\nconst roles = ['admin', 'user', 'guest']; \n// TypeScript निकालेगा: string[]\n
\n

जब आप let या सरणी का उपयोग करते हैं, तो TypeScript प्रकार को अधिक सामान्य में "विस्तारित" करता है। यह तार्किक है: चर बदल सकता है, सरणी उत्परिवर्तित हो सकती है। लेकिन 90% मामलों में, आपको सटीक मान की आवश्यकता होती है!

\n\n

as const के साथ समाधान

\n
const roles = ['admin', 'user', 'guest'] as const;\n// TypeScript निकालेगा: readonly ["admin", "user", "guest"]\n\nconst config = {\n  api: 'https://api.example.com',\n  timeout: 5000\n} as const;\n// TypeScript निकालेगा:\n// {\n//   readonly api: "https://api.example.com";\n//   readonly timeout: 5000;\n// }\n
\n

अब TypeScript सटीक शाब्दिक जानता है। कोई string या number नहीं — केवल विशिष्ट मान। यही TypeScript में as const का जादू है।

\n\n
\n\n

as const के साथ काम करते समय शीर्ष-5 गलतियाँ (और उनसे कैसे बचें)

\n

यह जानने के बावजूद कि as const क्या है, डेवलपर अक्सर एक ही गलतियाँ करते हैं। आइए वास्तविक मामलों पर उन पर चर्चा करें।

\n\n

गलती नंबर 1: readonly ऑब्जेक्ट को बदलने का प्रयास

\n

जब आप as const का उपयोग करते हैं, तो ऑब्जेक्ट या सरणी readonly हो जाती है। उन्हें बदलने का प्रयास करने पर संकलन त्रुटि होगी।

\n

खराब:

\n
const colors = ['red', 'green', 'blue'] as const;\ncolors.push('yellow'); // त्रुटि! प्रकार 'readonly [...]' पर 'push' गुण मौजूद नहीं है\n
\n

कैसे बचें:

\n

यदि आपको एक उत्परिवर्तनीय सरणी चाहिए, तो as const का उपयोग न करें। या एक प्रतिलिपि का उपयोग करें:

\n
const colors = ['red', 'green', 'blue'] as const;\nconst mutableColors = [...colors]; // अब यह एक सामान्य सरणी है\nmutableColors.push('yellow'); // काम करता है\n
\n\n

गलती नंबर 2: नेस्टेड ऑब्जेक्ट के बारे में भूल जाना

\n

as const पुनरावर्ती रूप से काम करता है — यह सभी नेस्टेड गुणों को readonly बनाता है। कई लोग इसके बारे में भूल जाते हैं।

\n

उदाहरण:

\n
const theme = {\n  colors: {\n    primary: '#007bff',\n    secondary: '#6c757d'\n  }\n} as const;\n\ntheme.colors.primary = '#000'; // त्रुटि! 'primary' को असाइन नहीं कर सकता क्योंकि यह एक read-only गुण है।\n
\n

कैसे बचें:

\n

यदि आपको केवल ऑब्जेक्ट का एक भाग बदलना है, तो सतही as const करें या आंशिक प्रकारों का उपयोग करें।

\n\n

गलती नंबर 3: as const के साथ और बिना तुलना

\n

कभी-कभी डेवलपर व्यवहार को भ्रमित करते हैं

ब्लॉग

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