Skip to content
GitHub

ပိုအစွမ်းထက်တဲ့ ကိရိယာများ(Generics, Utility Types)

အရှေ့က သင်ခန်းစာမှာ ကြုံတွေ့ခဲ့ရတဲ့ အခက်အခဲတွေကို ဖြေရှင်းဖို့ TypeScript မှာ ပိုပြီး အစွမ်းထက်တဲ့ Features (စွမ်းဆောင်ရည်များ) ရှိပါတယ်။ အဲ့ဒါတွေကတော့ Generics, Utility Types နဲ့ satisfies Keyword တွေပဲ ဖြစ်ပါတယ်။

Code တစ်ခုတည်းကိုပဲ Data Type အမျိုးမျိုးနဲ့ ပြန်လည် အသုံးပြုနိုင်အောင် (Reusable ဖြစ်အောင်) ဖန်တီးပေးပါတယ်။ ဒါကြောင့် Code တွေ ထပ်ခါထပ်ခါ ရေးရတာ သိသိသာသာ သက်သာသွားပါတယ်။ (ဥပမာပြောရရင် - ပုံစံတူ လုပ်ဆောင်ချက်ကို မတူညီတဲ့ Type တွေနဲ့ အဆင်ပြေပြေ သုံးနိုင်စေတဲ့ မှော်ဆန်တဲ့ Box လိုမျိုးပေါ့။)

ရှိပြီးသား Data ပုံစံ (Types) တွေကနေ ကိုယ်လိုချင်သလို ပြောင်းလဲထားတဲ့ Type အသစ်တွေကို အလွယ်တကူနဲ့ မြန်မြန်ဆန်ဆန် ဖန်တီးနိုင်စေပါတယ်။ (Data ပုံစံတွေကို အမြန် ပြင်ဆင်နိုင်တဲ့ Tools မျိုးစုံ ပါဝင်တဲ့ Toolbox လိုမျိုးပါပဲ။)

ဥပမာ - အရင် သင်ခန်းစာက Code တွေ ထပ်နေတဲ့ ပြဿနာ (Type အမျိုးမျိုးအတွက် Array ထဲက ပထမဆုံး Element ယူတဲ့ Function တွေကို ခွဲရေးနေရတဲ့ ပြဿနာ) ကို မှတ်မိသေးတယ် မဟုတ်လား?

အဲ့ဒီလို ပြဿနာမျိုးအတွက် Generics ဆိုတာကို အသုံးပြုလို့ ရပါတယ်။ Generics နဲ့ဆိုရင် အဲ့ဒီ Function ကို Code တစ်ကြောင်းတည်းနဲ့တင် Type အမျိုးမျိုးအတွက် လွယ်လွယ်လေး ရေးလို့ရသွားပါပြီ။ အောက်က Code လေးကို ကြည့်လိုက်ပါ။

index.ts
function getFirst<T>(arr: T[]): T | undefined {
return arr[0];
}
// အခုဆိုရင် ဒီ getFirst Function လေးကို Type အမျိုးမျိုးနဲ့ ပြန်လည် အသုံးပြုလို့ ရသွားပါပြီ
let firstNumber = getFirst([1, 2, 3]); // number Array နဲ့ သုံးမယ်
// firstNumber ရဲ့ Type က number | undefined ဆိုတာကို TypeScript က အလိုအလျောက် သိနေပြီ
let firstString = getFirst(["a", "b", "c"]); // string Array နဲ့ သုံးမယ်
// firstString ရဲ့ Type က string | undefined ဆိုတာ သိပြီ
interface User { name: string; age: number; }
let users: User[] = [{ name: "Alice", age: 30 }, { name: "Bob", age: 25 }];
let firstUser = getFirst(users); // ကိုယ်ပိုင် Object Array နဲ့လည်း သုံးလို့ရပြီ
// firstUser ရဲ့ Type က User | undefined ဆိုတာ သိပြီ