TypeScript में क्लास टाइप चेक: ऑब्जेक्ट का प्रकार कैसे जांचें

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

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

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

TypeScript में क्लास का प्रकार कैसे जांचें: शुरुआत से विशेषज्ञ तक

\n\n

क्या आपने कभी TypeScript में कोड लिखते हुए कोई अनजान टाइप का ऑब्जेक्ट पाया और सोचा, "तुम आखिर हो कौन?"? यह सवाल हजारों डेवलपर्स को परेशान करता है — यही कारण है कि TypeScript क्लास टाइप चेक टॉपिक ने Stack Overflow पर लाखों व्यूज बटोरे हैं। आज हम हमेशा के लिए समझ लेंगे कि TypeScript में क्लास के प्रकार को सही तरीके से कैसे जांचा जाए।

\n\n

इस लेख में आप सीखेंगे:

\n
    \n
  • क्लास के लिए typeof क्यों काम नहीं करता
  • \n
  • instanceof को स्विस आर्मी नाइफ की तरह कैसे इस्तेमाल करें
  • \n
  • type guards क्या हैं और वे आपके कोड को कैसे बचाते हैं
  • \n
  • is की मदद से अपनी खुद की टाइप चेक कैसे लिखें
  • \n
  • प्रैक्टिकल उदाहरण
  • \n
\n\n

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

\n\n

समस्या: typeof यहाँ क्यों बेकार है?

\n\n

JavaScript में typeof ऑपरेटर है जो प्रिमिटिव वैल्यूज के साथ बढ़िया काम करता है:

\n\n
typeof "hello" // "string"\ntypeof 42      // "number"\ntypeof true    // "boolean"
\n\n

लेकिन जब बात क्लास की आती है, typeof हार मान जाता है:

\n\n
class Dog {}\nclass Cat {}\n\nconst pet = new Dog();\n\ntypeof pet; // "object" — बेकार!\ntypeof Dog; // "function" — यह भी सही नहीं
\n\n

क्यों? क्योंकि JavaScript में क्लास सिर्फ कंस्ट्रक्टर फंक्शन का सिंटैक्टिक शुगर है। typeof सिर्फ "object" या "function" देखता है, लेकिन यह नहीं बता सकता कि कौन सा क्लास है।

\n\n

यहाँ आता है TypeScript क्लास टाइप चेक — टूल्स का एक पूरा शस्त्रागार जो आपको सटीक रूप से बताएगा कि आप किस क्लास के इंस्टेंस के साथ काम कर रहे हैं।

\n\n

तरीका 1: instanceof — आपका मुख्य सहायक

\n\n

क्लास का प्रकार जांचने का सबसे सीधा और आसान तरीका है instanceof ऑपरेटर। यह जांचता है कि क्या क्लास ऑब्जेक्ट की प्रोटोटाइप चेन में मौजूद है:

\n\n
class Animal {\n  name: string;\n  constructor(name: string) {\n    this.name = name;\n  }\n}\n\nclass Dog extends Animal {\n  bark() {\n    console.log("भौं भौं!");\n  }\n}\n\nclass Cat extends Animal {\n  meow() {\n    console.log("म्याऊं!");\n  }\n}\n\nfunction handleAnimal(animal: Animal) {\n  if (animal instanceof Dog) {\n    // TypeScript जानता है कि animal — Dog है\n    animal.bark();\n  } else if (animal instanceof Cat) {\n    animal.meow();\n  } else {\n    console.log(`अज्ञात जानवर: ${animal.name}`);\n  }\n}\n\nconst rex = new Dog("टॉमी");\nhandleAnimal(rex); // "भौं भौं!"
\n\n

ध्यान दें: animal instanceof Dog की जांच के बाद TypeScript ऑटोमैटिकली टाइप को संकुचित करता है (type narrowing) और Dog के मेथड्स को बिना एरर के कॉल करने देता है। यही type guards का जादू है — बिल्ट-इन टाइप रक्षक।

\n\n

instanceof कब काम नहीं करता?

\n
    \n
  • अलग-अलग विंडो/फ्रेम के साथ काम करते समय (अलग ग्लोबल ऑब्जेक्ट)
  • \n
  • अगर क्लास अलग-अलग वर्जन वाले मॉड्यूल में परिभाषित हों
  • \n
  • इंटरफेस की जांच करते समय (वे रनटाइम में मौजूद नहीं होते)
  • \n
\n\n

तरीका 2: is ऑपरेटर के साथ खुद के type guards

\n\n

कभी-कभी instanceof काफी नहीं होता। उदाहरण के लिए, आप सिर्फ क्लास ही नहीं, बल्कि अतिरिक्त शर्तें भी जांचना चाहते हैं। यहाँ मदद करते हैं यूजर-डिफाइंड type guards is कीवर्ड के साथ:

\n\n
interface Bird {\n  fly(): void;\n  layEggs(): void;\n}\n\ninterface Fish {\n  swim(): void;\n  layEggs(): void;\n}\n\nfunction isFish(pet: Bird | Fish): pet is Fish {\n  return (pet as Fish).swim !== undefined;\n}\n\nfunction move(pet: Bird | Fish) {\n  if (isFish(pet)) {\n    // TypeScript जानता है: pet — Fish है\n    pet.swim();\n  } else {\n    pet.fly();\n  }\n}
\n\n

रिटर्न टाइप में pet is Fish सिंटैक्स पर ध्यान दें। यह TypeScript को बताता है: "अगर यह फंक्शन true रिटर्न करता है, तो पैरामीटर pet — Fish है।" अब TypeScript हर जगह टाइप को संकुचित करेगा जहाँ आप इस फंक्शन का उपयोग करेंगे।

ब्लॉग

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