spinny:~/writing $ vim advanced-typescript-patterns.md
1~2TypeScript הפך לסטנדרט התעשייתי לפיתוח ווב בקנה מידה גדול. בעוד שרוב המפתחים מכירים את הבסיס של ממשקים וטיפוסים, העוצמה האמיתית טמונה במערכת הטיפוסים המתקדמת. הנה 5 דפוסים שיבדילו אותך כמהנדס בכיר.3~4## 1. Generic Constraints5~6גנריקס הם חזקים, אבל לפעמים צריך להגביל מה ניתן להעביר. `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~22טיפוסים מותנים מאפשרים לך ליצור מיפויי טיפוסים לא אחידים. התחביר דומה לאופרטור הטרנרי ב-JavaScript.23~24```typescript25type IsString<T> = T extends string ? true : false;26~27type A = IsString<string>; // true28type B = IsString<number>; // false29```30~31מקרה שימוש מעשי הוא סינון טיפוסים מאיחוד:32~33```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```37~38## 3. Mapped Types39~40טיפוסים ממופים מאפשרים לך ליצור טיפוסים חדשים על בסיס ישנים על ידי טרנספורמציה של מאפיינים.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~65הוצגו ב-TypeScript 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~82מילת המפתח `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