TypeScript में unknown बनाम any: 2025 में क्या चुनें?

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

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

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

परिचय: यह विषय Stack Overflow पर क्यों छा गया?

\n

यदि आपने कभी TypeScript में लिखा है, तो आपने निश्चित रूप से इस दुविधा का सामना किया होगा: unknown या any? Stack Overflow पर हजारों बार देखा गया यह प्रश्न 2025 में भी प्रासंगिक बना हुआ है। ऐसा लगता है कि दोनों प्रकार कुछ भी संग्रहीत करने की अनुमति देते हैं - तो अंतर क्या है?

\n\n

कल्पना करें कि आप एक घर बना रहे हैं। any एक ऐसा दरवाजा है जो सभी के लिए खुला है, जिसमें चोर भी शामिल हैं। unknown एक ताले और वीडियो आई होल वाला दरवाजा है: आप पहले जाँच करते हैं कि कौन आया है, फिर अंदर आने देते हैं। इस लेख में, हम समझेंगे कि क्यों unknown TypeScript में सुरक्षा का स्वर्ण मानक बन गया है, और any एक बुराई है जो कभी-कभी उचित होती है।

\n\n

हम केवल दस्तावेज़ीकरण को दोबारा नहीं बताएंगे। हम 2025 के अभ्यास से वास्तविक मामले दिखाएंगे, सर्वोत्तम प्रथाओं पर चर्चा करेंगे और चयन के लिए एक स्पष्ट एल्गोरिदम देंगे। चलिए शुरू करते हैं!

\n\n

any क्या है और हर कोई इससे क्यों डरता है?

\n\n

any TypeScript में सबसे "लचीला" प्रकार है। यह सचमुच कंपाइलर से कहता है: "टाइप सिस्टम को बंद कर दो, मुझे पता है मैं क्या कर रहा हूँ।" यह एक सुपरपावर की तरह लगता है, लेकिन वास्तव में यह एक टाइम बम है।

\n\n

उदाहरण: कैसे any प्रकारों को तोड़ता है

\n
function processUser(user: any) {\n    console.log(user.name.toUpperCase()); // रनटाइम में त्रुटि, यदि user null है\n}\n\nprocessUser(null); // TypeError: Cannot read property 'toUpperCase' of null
\n\n

TypeScript कंपाइलर आपको इसके बारे में चेतावनी भी नहीं देगा! any सभी जाँचों को बंद कर देता है, और त्रुटि केवल प्रोडक्शन में दिखाई देगी। 2025 में, जब प्रोजेक्ट अधिक जटिल हो जाते हैं, ऐसा दृष्टिकोण अराजकता का मार्ग है।

\n\n

any कब उपयोगी है?

\n
    \n
  • JavaScript से माइग्रेशन: जब आप किसी पुराने प्रोजेक्ट को फिर से लिख रहे हों, any एक अस्थायी सहारा है।
  • \n
  • डायनामिक डेटा: उदाहरण के लिए, बाहरी API से प्रतिक्रियाएँ, जहाँ संरचना बदलती है।
  • \n
  • परीक्षण: मॉक में जटिल प्रकारों का वर्णन करने की तुलना में any का उपयोग करना कभी-कभी आसान होता है।
  • \n
\n\n

लेकिन याद रखें: any एक असीमित सीमा वाले क्रेडिट कार्ड की तरह है। तब तक सुविधाजनक, जब तक बिल न आए।

\n\n

Unknown: प्रवेश द्वार पर सख्त गार्ड

\n\n

unknown TypeScript 3.0 में any के सुरक्षित विकल्प के रूप में दिखाई दिया। यह भी कोई भी मान रख सकता है, लेकिन स्पष्ट जाँच के बिना इसके साथ काम करने से मना करता है। यह एक कंटेनर प्रकार है जिसे सत्यापन की आवश्यकता होती है।

\n\n

उदाहरण: unknown क्रिया में

\n
function 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 आपको अपने पैर में गोली मारने नहीं देता। उपयोग करने से पहले आपको प्रकार की जाँच करनी होगी। यही सुरक्षित टाइपिंग है।

\n\n

तालिका में any बनाम unknown की तुलना

\n\n

सामग्री को मजबूत करने के लिए, आइए मुख्य अंतर देखें:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
मानदंडanyunknown
कोई भी मान निर्दिष्ट करना✅ हाँ✅ हाँ
बिना जाँच के गुणों तक पहुँच✅ हाँ❌ नहीं
किसी अन्य प्रकार को निर्दिष्ट करना✅ किसी को भी❌ केवल any या unknown
रनटाइम त्रुटियों से सुरक्षा❌ नहीं✅ हाँ (जाँच की आवश्यकता है)
\n\n

जैसा कि आप देख सकते हैं, unknown जीतता है

ब्लॉग

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