AnyCompiler

Type Narrowing

Jab ek value ka type ek union hota hai — jaise string | number — TypeScript aapko un types mein se sirf ek ke liye specific operations use nahi karne dega jab tak aap proof na de do ki woh actually kaunsa hai. Narrowing wahi tarika hai jisse aap yeh proof dete ho, aur TypeScript ka checker actually us proof ko track karta hai.

function describe(value: string | number): string {
  if (typeof value === "string") {
    return `String of length ${value.length}`;
  }
  return `Number: ${value.toFixed(2)}`;
}

console.log(describe("hello"));
console.log(describe(3.14159));
Output
String of length 5
Number: 3.14

if (typeof value === "string") block ke andar, TypeScript value ko ek string ki tarah treat karta hai — value.length wahan valid hai lekin us block ke bahar ek compile error hoga, jahan value abhi bhi ek number ho sakta hai.

in — check karna ki koi property exist karti hai ya nahi

in operator check karta hai ki ek object mein di gayi property hai ya nahi, aur TypeScript us check ko use karke do alag object shapes ke beech narrow karta hai.

interface Cat {
  meow(): string;
}

interface Dog {
  bark(): string;
}

function speak(animal: Cat | Dog): string {
  if ("meow" in animal) {
    return animal.meow();
  }
  return animal.bark();
}

const cat: Cat = { meow: () => "Meow!" };
const dog: Dog = { bark: () => "Woof!" };

console.log(speak(cat));
console.log(speak(dog));
Output
Meow!
Woof!

Aage: modules aur standard library — files ke across code organize karna, aur kuch utility types jo ab tak cover ki gayi har cheez par banate hain.