TypeScriptAdvanced
Mapped Types (ম্যাপড টাইপ)
keyof, mapped type basics, readonly/? modifiers remove এবং real-world utility গড়া — বাংলায়।
10টি অংশবাংলা ভাষায়
Mapped type একটি অবজেক্ট টাইপের প্রতিটি প্রপার্টিতে লুপ চালিয়ে নতুন অবজেক্ট টাইপ বানায় — যেমন সব প্রপার্টি boolean করা বা optional করা।
keyof
type Person = { name: string; age: number };
// keyof → "name" | "age"
type PersonKeys = keyof Person;
function getValue(obj: Person, key: PersonKeys): Person[PersonKeys] {
return obj[key];
}মৌলিক Mapped Type
// প্রতিটি প্রপার্টিকে boolean-এ বদলে নতুন টাইপ
type OptionsFlags<T> = { [K in keyof T]: boolean };
type Feature = { layout: string; theme: string };
type Flags = OptionsFlags<Feature>;
// → { layout: boolean; theme: boolean }Modifiers: readonly ও ?
type ReadonlyAll<T> = { readonly [K in keyof T]: T[K] };
type OptionalAll<T> = { [K in keyof T]?: T[K] };
type Person = { name: string; age: number };
type RO_Person = ReadonlyAll<Person>; // readonly
type Opt_Person = OptionalAll<Person>; // সব optional
// '-' দিয়ে modifier সরানো হয়
type MyRequired<T> = { [K in keyof T]-?: T[K] };Real-world প্রয়োগ
// প্রতিটি প্রপার্টির জন্য event handler সৃষ্টি
type EventMap<T> = {
[K in keyof T as `on${Capitalize<keyof T>}`]: () => Promise<void>;
};
type AppEvents = EventMap<{ load: string; save: string }>;
// → { onLoad: () => Promise<void>; onSave: () => Promise<void> }keyof + mapped = শক্তি
keyof ও mapped type-এর জুটি টাইপ-স্তরের লুপ। আগের অধ্যায়ের Partical/Record মূলত এই প্যাটার্নেই তৈরি করা।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।