पाठ 20 / 26

टाइप गार्ड्स

रनटाइम जाँच से किसी व्यापक टाइप को विशिष्ट टाइप तक संकरा करें।

typeof से नैरोइंग

if (typeof x === "string") ब्लॉक के अंदर, TS जानता है कि उस ब्रांच में x एक string है।

function printId(id: string | number) {
  if (typeof id === "string") {
    console.log(id.toUpperCase()); // id is string here
  } else {
    console.log(id.toFixed(2));    // id is number here
  }
}

instanceof से नैरोइंग

क्लासों के लिए, instanceof, क्लास टाइप्स के यूनियन को मेल खाने वाले तक संकरा करता है।

class Cat { meow() { return "Meow!"; } }
class Dog { bark() { return "Woof!"; } }

function speak(pet: Cat | Dog) {
  if (pet instanceof Cat) {
    console.log(pet.meow());
  } else {
    console.log(pet.bark());
  }
}

नैरो क्यों करें?

यूनियन टाइप केवल वे प्रॉपर्टीज़ दिखाता है जो हर सदस्य में साझा हैं। नैरोइंग कंपाइलर को साबित करती है कि असल में आपके पास कौन-सा सदस्य है, जिससे उसकी विशिष्ट प्रॉपर्टीज़ और मेथड्स खुल जाते हैं।

त्वरित जाँच: `if (typeof id === "string") { ... }` के अंदर, TS `id` को कौन-सा टाइप देता है?

  • string | number, अपरिवर्तित
  • string
  • any
Answer

string — typeof जाँच उस ब्लॉक के अंदर यूनियन को केवल string तक संकरा कर देती है।