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