spinny:~/writing $ vim advanced-typescript-patterns.md
1~2TypeScript বড় আকারের ওয়েব ডেভেলপমেন্টের জন্য শিল্পের মানদণ্ড হয়ে উঠেছে। বেশিরভাগ ডেভেলপার ইন্টারফেস এবং টাইপসের মৌলিক বিষয়গুলো জানলেও, আসল শক্তি এর অ্যাডভান্সড টাইপ সিস্টেমে। এখানে ৫টি প্যাটার্ন রয়েছে যা আপনাকে একজন সিনিয়র ইঞ্জিনিয়ার হিসেবে আলাদা করবে।3~4## ১. Generic Constraints5~6Generics শক্তিশালী, কিন্তু কখনো কখনো আপনাকে সীমিত করতে হয় কী পাস করা যেতে পারে। `extends` এখানে আপনার বন্ধু।7~8```typescript9interface HasId {10 id: string;11}12~13function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```17~18`T` যে `HasId` এক্সটেন্ড করে তা নিশ্চিত করে, আমরা গ্যারান্টি দিই যে ফাংশনের ভিতরে `.id` অ্যাক্সেস করা নিরাপদ।19~20## ২. Conditional Types21~22Conditional types আপনাকে অ-ইউনিফর্ম টাইপ ম্যাপিং তৈরি করতে দেয়। সিনট্যাক্সটি JavaScript-এর টার্নারি অপারেটরের মতো।23~24```typescript25type IsString<T> = T extends string ? true : false;26~27type A = IsString<string>; // true28type B = IsString<number>; // false29```30~31একটি ব্যবহারিক উদাহরণ হলো union থেকে টাইপ ফিল্টার করা:32~33```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```37~38## ৩. Mapped Types39~40Mapped types আপনাকে প্রোপার্টি ট্রান্সফর্ম করে পুরানো টাইপের উপর ভিত্তি করে নতুন টাইপ তৈরি করতে দেয়।41~42```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};46~47interface User {48 name: string;49 age: number;50}51~52type ReadOnlyUser = ReadOnly<User>;53```54~55আপনি মডিফায়ার যোগ বা অপসারণও করতে পারেন:56~57```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```62~63## ৪. Template Literal Types64~65TypeScript 4.1-এ প্রবর্তিত, এগুলো আপনাকে সরাসরি স্ট্রিং টাইপ ম্যানিপুলেট করতে দেয়।66~67```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"70~71type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';73~74type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```77~78এটি নির্দিষ্ট প্যাটার্ন অনুসরণ করা স্ট্রিং টাইপ করার জন্য অবিশ্বাস্যভাবে কার্যকর, যেমন CSS ক্লাস বা ইভেন্ট নাম।79~80## ৫. `infer` কীওয়ার্ড81~82Conditional types-এর মধ্যে `infer` কীওয়ার্ড আপনাকে অন্য টাইপ থেকে টাইপ এক্সট্র্যাক্ট করতে দেয়।83~84```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;86~87function check(): boolean {88 return true;89}90~91type CheckReturn = ReturnType<typeof check>; // boolean92```93~94এখানে, আমরা TypeScript-কে একটি ফাংশনের রিটার্ন টাইপ `R` "ইনফার" করতে এবং তা রিটার্ন করতে বলছি।95~96## উপসংহার97~98এই প্যাটার্নগুলো আয়ত্ত করলে আপনি এমন লাইব্রেরি এবং ইউটিলিটি লিখতে পারবেন যা শক্তিশালী এবং চমৎকার ডেভেলপার অভিজ্ঞতা (DX) প্রদান করে। অ্যাডভান্সড TypeScript-এর লক্ষ্য জটিলতার জন্য জটিলতা নয়, বরং নিরাপত্তা এবং প্রকাশক্ষমতা।99~
NORMAL · advanced-typescript-patterns.md [readonly]99 lines · :q to close