परिचय: यह विषय Stack Overflow पर क्यों छा गया?
\nयदि आपने कभी TypeScript में लिखा है, तो आपने निश्चित रूप से इस दुविधा का सामना किया होगा: unknown या any? Stack Overflow पर हजारों बार देखा गया यह प्रश्न 2025 में भी प्रासंगिक बना हुआ है। ऐसा लगता है कि दोनों प्रकार कुछ भी संग्रहीत करने की अनुमति देते हैं - तो अंतर क्या है?
कल्पना करें कि आप एक घर बना रहे हैं। any एक ऐसा दरवाजा है जो सभी के लिए खुला है, जिसमें चोर भी शामिल हैं। unknown एक ताले और वीडियो आई होल वाला दरवाजा है: आप पहले जाँच करते हैं कि कौन आया है, फिर अंदर आने देते हैं। इस लेख में, हम समझेंगे कि क्यों unknown TypeScript में सुरक्षा का स्वर्ण मानक बन गया है, और any एक बुराई है जो कभी-कभी उचित होती है।
हम केवल दस्तावेज़ीकरण को दोबारा नहीं बताएंगे। हम 2025 के अभ्यास से वास्तविक मामले दिखाएंगे, सर्वोत्तम प्रथाओं पर चर्चा करेंगे और चयन के लिए एक स्पष्ट एल्गोरिदम देंगे। चलिए शुरू करते हैं!
\n\nany क्या है और हर कोई इससे क्यों डरता है?
\n\nany TypeScript में सबसे "लचीला" प्रकार है। यह सचमुच कंपाइलर से कहता है: "टाइप सिस्टम को बंद कर दो, मुझे पता है मैं क्या कर रहा हूँ।" यह एक सुपरपावर की तरह लगता है, लेकिन वास्तव में यह एक टाइम बम है।
उदाहरण: कैसे any प्रकारों को तोड़ता है
\nfunction processUser(user: any) {\n console.log(user.name.toUpperCase()); // रनटाइम में त्रुटि, यदि user null है\n}\n\nprocessUser(null); // TypeError: Cannot read property 'toUpperCase' of null\n\nTypeScript कंपाइलर आपको इसके बारे में चेतावनी भी नहीं देगा! any सभी जाँचों को बंद कर देता है, और त्रुटि केवल प्रोडक्शन में दिखाई देगी। 2025 में, जब प्रोजेक्ट अधिक जटिल हो जाते हैं, ऐसा दृष्टिकोण अराजकता का मार्ग है।
any कब उपयोगी है?
\n- \n
- JavaScript से माइग्रेशन: जब आप किसी पुराने प्रोजेक्ट को फिर से लिख रहे हों,
anyएक अस्थायी सहारा है। \n - डायनामिक डेटा: उदाहरण के लिए, बाहरी API से प्रतिक्रियाएँ, जहाँ संरचना बदलती है। \n
- परीक्षण: मॉक में जटिल प्रकारों का वर्णन करने की तुलना में
anyका उपयोग करना कभी-कभी आसान होता है। \n
लेकिन याद रखें: any एक असीमित सीमा वाले क्रेडिट कार्ड की तरह है। तब तक सुविधाजनक, जब तक बिल न आए।
Unknown: प्रवेश द्वार पर सख्त गार्ड
\n\nunknown TypeScript 3.0 में any के सुरक्षित विकल्प के रूप में दिखाई दिया। यह भी कोई भी मान रख सकता है, लेकिन स्पष्ट जाँच के बिना इसके साथ काम करने से मना करता है। यह एक कंटेनर प्रकार है जिसे सत्यापन की आवश्यकता होती है।
उदाहरण: unknown क्रिया में
\nfunction processUser(user: unknown) {\n // संकलन त्रुटि! 'unknown' प्रकार पर 'name' गुण मौजूद नहीं है\n // console.log(user.name.toUpperCase()); \n \n // जाँच की आवश्यकता है\n if (user && typeof user === 'object' && 'name' in user) {\n const typedUser = user as { name: string };\n console.log(typedUser.name.toUpperCase()); // सब ठीक है\n }\n}\n\nprocessUser({ name: "Alice" }); // ALICE\nprocessUser(null); // कुछ नहीं गिरेगा\n\nअंतर देखा? unknown आपको अपने पैर में गोली मारने नहीं देता। उपयोग करने से पहले आपको प्रकार की जाँच करनी होगी। यही सुरक्षित टाइपिंग है।
तालिका में any बनाम unknown की तुलना
\n\nसामग्री को मजबूत करने के लिए, आइए मुख्य अंतर देखें:
\n\n| मानदंड | \nany | \nunknown | \n
|---|---|---|
| कोई भी मान निर्दिष्ट करना | \n✅ हाँ | \n✅ हाँ | \n
| बिना जाँच के गुणों तक पहुँच | \n✅ हाँ | \n❌ नहीं | \n
| किसी अन्य प्रकार को निर्दिष्ट करना | \n✅ किसी को भी | \n❌ केवल any या unknown | \n
| रनटाइम त्रुटियों से सुरक्षा | \n❌ नहीं | \n✅ हाँ (जाँच की आवश्यकता है) | \n
जैसा कि आप देख सकते हैं, unknown जीतता है