आप TypeScript का उपयोग इसकी सुरक्षा के लिए करते हैं, लेकिन आपने शायद देखा होगा कि as
ऑपरेटर कम्पाइलेशन को तब भी फोर्स कर सकता है जब TypeScript असंगत टाइप्स का संदेह करता है। यह लचीलापन आकर्षक हो सकता है, लेकिन इसमें अक्सर खतरे छिपे होते हैं। आइए जानें कि as
का अत्यधिक उपयोग रनटाइम एरर को कैसे जन्म दे सकता है और इन खतरों से कैसे बचा जा सकता है।
as
की समस्या: कम्पाइलेशन में छिपी हुई त्रुटियां
TypeScript में, as
ऑपरेटर एक type assertion करने की अनुमति देता है, यानी TypeScript को कहना "मुझ पर भरोसा करो, मैं जानता हूं मैं क्या कर रहा हूं।" हालांकि, यह टूल कभी-कभी एक बुरा विचार हो सकता है, क्योंकि यह टाइप चेक को बायपास करता है। जब आप as
का उपयोग करते हैं, तो आप टाइप के सही होने की जिम्मेदारी लेते हैं, भले ही TypeScript इसे वेरिफाई नहीं कर सकता। आइए कुछ ठोस उदाहरणों से इसे समझें।
उदाहरण 1: as
के साथ ऐसा टाइप फोर्स करना जो वास्तव में कम्पैटिबल नहीं है
मान लीजिए आपके पास एक Person
टाइप का ऑब्जेक्ट है जिसमें कुछ निश्चित प्रॉपर्टीज़ हैं, लेकिन आप as
का उपयोग करके इसे एक अलग टाइप में फोर्स करते हैं, यह सोचकर कि यह काम करेगा।
इस उदाहरण में, employee
के पास role
प्रॉपर्टी नहीं है, लेकिन as
की वजह से TypeScript कम्पाइलेशन के दौरान कोई एरर नहीं देता। हालांकि, रनटाइम पर, employee.role
undefined
है, जो एरर का कारण बन सकता है यदि आपका कोड string
टाइप की वैल्यू की उम्मीद करता है।
उदाहरण 2: as unknown as
के साथ चेक को बायपास करना
कभी-कभी, डेवलपर्स unknown
के माध्यम से एक टाइप को फोर्स करने के लिए चेन कास्टिंग का उपयोग करते हैं, जैसा कि इस उदाहरण में:
यहां, हम एक data
वैल्यू लेते हैं जो कुछ भी हो सकती है, और इसे unknown
के माध्यम से number
में कास्ट करते हैं। कम्पाइलेशन पर, सब कुछ ठीक लगता है, लेकिन रनटाइम पर, एडिशन NaN
उत्पन्न करता है क्योंकि data
वास्तव में एक स्ट्रिंग थी।
उदाहरण 3: आंशिक ऑब्जेक्ट्स को मैनिपुलेट करना
एक और क्लासिक केस देखें जहां हम एक आंशिक रूप से पूर्ण ऑब्जेक्ट को पूर्ण टाइप में फोर्स करते हैं, यह सोचकर कि सब ठीक रहेगा:
partialProduct
ऑब्जेक्ट को Product
में कन्वर्ट किया गया है, जबकि इसमें price
प्रॉपर्टी मौजूद नहीं है। as
की वजह से TypeScript इस कमी को नहीं पकड़ता, लेकिन यह undefined
की ओर ले जाता है जो पूर्व जांच के बिना इस्तेमाल किए जाने पर रनटाइम एरर उत्पन्न कर सकता है।
Zod के साथ त्रुटियों से कैसे बचें
as
द्वारा उत्पन्न समस्याओं से बचने के लिए, एक अच्छी प्रैक्टिस है डेटा को रनटाइम पर वैलिडेट करना, विशेष रूप से यदि वह किसी बाहरी स्रोत से आता है। यहीं पर Zod काम आता है। Zod एक TypeScript स्कीमा वैलिडेशन लाइब्रेरी है जो सुरक्षित टाइप को परिभाषित करने और उन्हें रनटाइम पर वैलिडेट करने की अनुमति देती है।
Zod के साथ, as
के साथ टाइप फोर्स करने के बजाय, आप एक पूर्वनिर्धारित स्कीमा के साथ डेटा को वैलिडेट और कन्वर्ट कर सकते हैं। उदाहरण के लिए:
इस उदाहरण में, Zod जांचता है कि partialProduct
Product
स्कीमा का पालन करता है या नहीं। यदि कोई प्रॉपर्टी गायब है, तो Zod undefined
वैल्यू को पास करने देने के बजाय एक वैलिडेशन एरर लौटाता है। Zod की मदद से, आप अपने डेटा को सुरक्षित करते हैं और अपूर्ण या गलत टाइप से संबंधित रनटाइम एरर से बचते हैं।
निष्कर्ष
as
ऑपरेटर TypeScript के चेक को बायपास करने का एक त्वरित समाधान हो सकता है, लेकिन यह रनटाइम एरर का जोखिम पैदा करता है, विशेष रूप से जब बिना वैलिडेशन के टाइप फोर्स किए जाते हैं। Zod जैसी लाइब्रेरी का उपयोग करके, आप रनटाइम पर अपने डेटा को वैलिडेट कर सकते हैं और इस प्रकार TypeScript की सुरक्षा का पूरा लाभ उठा सकते हैं, यहां तक कि उन मामलों में भी जहां as
एकमात्र समाधान लगता था।