דילוג לתוכן המרכזי
מודול 6 · שיעור 1 מתוך 211/14 בקורס~15 min
שיעורי מודול (1/2)

סוגים מותנים ומסיקים

טיפוסים מותנים מאפשרים לבטא החלטות מסוג לא טריוויאליות המבוססות על יחסי ירושה. התחביר דומה לאופרטור הטרינרי של JavaScript:

TS
T extends U ? X : Y

אם ניתן להקצות את הסוג T ל-U, הסוג המתקבל יהיה X, אחרת הוא יהיה Y.


סוגים מותנים בסיסיים

סוג מותנה מעריך תנאי בזמן הידור:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

דפוס זה עוצמתי ביותר בשילוב עם תרופות גנריות ליצירת סוגי שירות גמישים ודינמיים.


סוג חילוץ עם infer

בתוך הסעיף extends מסוג מותנה, נוכל להשתמש במילת המפתח infer כדי להכריז על משתנה סוג שיש להסיק על ידי המהדר.

לדוגמה, אם נרצה לחלץ את סוג ההחזרה של פונקציה:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

בדוגמה זו, infer R אומר ל-TypeScript לקבוע אוטומטית את סוג ההחזרה של הפונקציה ולהפוך אותה לזמינה כR בענף החיובי של התנאי.


נסה זאת בעצמך

תרגיל 1: סוג IsString

פעילות גופנית#ts.m6.l1.e1
ניסיונות: 0טוען...

צור סוג גנרי בשם IsString<T> שמחזיר את הטיפוס המילולי true אם T מרחיב מחרוזת, אחרת false.

טוען עורך...
הצג רמז

השתמש בסוג התחביר IsString<T> = T מרחיב מחרוזת ? נכון : שקר; כדי לבדוק את הסוג.

הפתרון זמין לאחר 3 ניסיונות

תרגיל 2: חילוץ טיפוס ממערך עם infer

פעילות גופנית#ts.m6.l1.e2
ניסיונות: 0טוען...

הגדר סוג גנרי UnpackArray<T> שמשתמש ב-infer כדי לחלץ את סוג האלמנט של מערך T. אם T הוא מערך (לדוגמה U[]), החזר U, אחרת החזר את אותו סוג T.

טוען עורך...
הצג רמז

השתמש ב-T מרחיב (להסיק U)[] ? U : T כדי להכריז ולהחזיר את משתנה הסוג המוסיק U.

הפתרון זמין לאחר 3 ניסיונות