> For the complete documentation index, see [llms.txt](https://lwin-moe-paing.gitbook.io/typescript-baby-by-lwin-moe-paing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lwin-moe-paing.gitbook.io/typescript-baby-by-lwin-moe-paing/other-topic/typescript-narrowing.md).

# TypeScript Narrowing

Type တွေက Union အနေနဲ့ (၂) မျိုး ၊ (၃) မျိုးဖြစ်နေတတ်ပါတယ် ။&#x20;

Code Block အတွင်းမှာ ဘယ် Type ဖြစ်နေပြီလဲဆိုတာကို တိတိကျကျသိသွားအောင် လုပ်တာကို Narrowing လုပ်တယ်လို့ ခေါ်ပါတယ် ။

Narrowing ကို အဓိကအားဖြင့် Conditional Statements တွေနဲ့ လုပ်နိုင်ပါတယ် ။

<figure><img src="/files/3T9YOpp3I30NYHlX3lpv" alt=""><figcaption></figcaption></figure>

`typeof value === "string"` နဲ့ စစ်ထားတဲ့ block အတွင်းကို ကြည့်လိုက်ပါ ။ အဲ့ဒီ Condition ကြောင့် value က `string type`  မှန်း typescript က သိသွားပြီး narrow down လုပ်လိုက်ပါတယ် ။ ဒီတော့ value မှာ string နဲ့ ဆိုင်တဲ့ method တွေပဲ TypeScript Server က feedback ပေးပါတော့မယ် ။

`else` block အတွင်းမှာလည်း TypeScript က narrow down လုပ်လိုက်ပါတယ် ။ အပေါ်မှာက String Type ဖြစ်တဲ့အတွက် အောက် Block မှာ Number Type အဖြစ် Narrowing လုပ်သွားပါတယ်။

<figure><img src="/files/ghufL7LPVu9TTvN59UsS" alt=""><figcaption></figcaption></figure>

Switch Statement နဲ့ Narrowing လုပ်တဲ့ Code ကိုရေးသားထားခြင်းပဲဖြစ်ပါတယ် ။

Admin type အတွက် role မှာ "admin" ဖြစ်ပြီး User type အတွက် role မှာ "user" ဖြစ်ပါတယ် ။

"user.role" ကို အခြေခံပြီး switch မှာ စစ်ထုတ်ထားတာပါ ။

case "admin" block ထဲမှာ user က Admin Type အဖြစ် narrow လုပ်သွားတာကို သိနိုင်ပါတယ် ။

ဒီလောက်ဆို Narrowing လုပ်တယ်ဆိုတာကို အခြေခံအားဖြင့် နားလည်သွားလောက်ပါပြီ ။
