spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript বড় আকারের ওয়েব ডেভেলপমেন্টের জন্য শিল্পের মানদণ্ড হয়ে উঠেছে। বেশিরভাগ ডেভেলপার ইন্টারফেস এবং টাইপসের মৌলিক বিষয়গুলো জানলেও, আসল শক্তি এর অ্যাডভান্সড টাইপ সিস্টেমে। এখানে ৫টি প্যাটার্ন রয়েছে যা আপনাকে একজন সিনিয়র ইঞ্জিনিয়ার হিসেবে আলাদা করবে।34## ১. Generic Constraints56Generics শক্তিশালী, কিন্তু কখনো কখনো আপনাকে সীমিত করতে হয় কী পাস করা যেতে পারে। `extends` এখানে আপনার বন্ধু।78```typescript9interface HasId {10 id: string;11}1213function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```1718`T` যে `HasId` এক্সটেন্ড করে তা নিশ্চিত করে, আমরা গ্যারান্টি দিই যে ফাংশনের ভিতরে `.id` অ্যাক্সেস করা নিরাপদ।1920## ২. Conditional Types2122Conditional types আপনাকে অ-ইউনিফর্ম টাইপ ম্যাপিং তৈরি করতে দেয়। সিনট্যাক্সটি JavaScript-এর টার্নারি অপারেটরের মতো।2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031একটি ব্যবহারিক উদাহরণ হলো union থেকে টাইপ ফিল্টার করা:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## ৩. Mapped Types3940Mapped types আপনাকে প্রোপার্টি ট্রান্সফর্ম করে পুরানো টাইপের উপর ভিত্তি করে নতুন টাইপ তৈরি করতে দেয়।4142```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};4647interface User {48 name: string;49 age: number;50}5152type ReadOnlyUser = ReadOnly<User>;53```5455আপনি মডিফায়ার যোগ বা অপসারণও করতে পারেন:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## ৪. Template Literal Types6465TypeScript 4.1-এ প্রবর্তিত, এগুলো আপনাকে সরাসরি স্ট্রিং টাইপ ম্যানিপুলেট করতে দেয়।6667```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"7071type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';7374type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```7778এটি নির্দিষ্ট প্যাটার্ন অনুসরণ করা স্ট্রিং টাইপ করার জন্য অবিশ্বাস্যভাবে কার্যকর, যেমন CSS ক্লাস বা ইভেন্ট নাম।7980## ৫. `infer` কীওয়ার্ড8182Conditional types-এর মধ্যে `infer` কীওয়ার্ড আপনাকে অন্য টাইপ থেকে টাইপ এক্সট্র্যাক্ট করতে দেয়।8384```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;8687function check(): boolean {88 return true;89}9091type CheckReturn = ReturnType<typeof check>; // boolean92```9394এখানে, আমরা TypeScript-কে একটি ফাংশনের রিটার্ন টাইপ `R` "ইনফার" করতে এবং তা রিটার্ন করতে বলছি।9596## উপসংহার9798এই প্যাটার্নগুলো আয়ত্ত করলে আপনি এমন লাইব্রেরি এবং ইউটিলিটি লিখতে পারবেন যা শক্তিশালী এবং চমৎকার ডেভেলপার অভিজ্ঞতা (DX) প্রদান করে। অ্যাডভান্সড TypeScript-এর লক্ষ্য জটিলতার জন্য জটিলতা নয়, বরং নিরাপত্তা এবং প্রকাশক্ষমতা।99
:সিনিয়র ইঞ্জিনিয়ারদের জন্য ৫টি অ্যাডভান্সড TypeScript প্যাটার্নlines 1-99 (END) — press q to close