spinny:~/writing $ vim advanced-typescript-patterns.md
1~2TypeScript بڑے پیمانے پر ویب ڈیولپمنٹ کے لیے صنعتی معیار بن چکا ہے۔ اگرچہ زیادہ تر ڈیولپرز انٹرفیسز اور ٹائپس کی بنیادی باتیں جانتے ہیں، لیکن اصل طاقت اس کے ایڈوانسڈ ٹائپ سسٹم میں ہے۔ یہاں 5 پیٹرنز ہیں جو آپ کو ایک سینیئر انجینیئر کے طور پر ممتاز کریں گے۔3~4## 1. 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## 2. 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## 3. 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## 4. 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## 5. `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