שיעורי מודול (1/2)
סוגים מותנים ומסיקים
טיפוסים מותנים מאפשרים לבטא החלטות מסוג לא טריוויאליות המבוססות על יחסי ירושה. התחביר דומה לאופרטור הטרינרי של JavaScript:
T extends U ? X : Yאם ניתן להקצות את הסוג T ל-U, הסוג המתקבל יהיה X, אחרת הוא יהיה Y.
סוגים מותנים בסיסיים
סוג מותנה מעריך תנאי בזמן הידור:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseדפוס זה עוצמתי ביותר בשילוב עם תרופות גנריות ליצירת סוגי שירות גמישים ודינמיים.
סוג חילוץ עם infer
בתוך הסעיף extends מסוג מותנה, נוכל להשתמש במילת המפתח infer כדי להכריז על משתנה סוג שיש להסיק על ידי המהדר.
לדוגמה, אם נרצה לחלץ את סוג ההחזרה של פונקציה:
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
צור סוג גנרי בשם IsString<T> שמחזיר את הטיפוס המילולי true אם T מרחיב מחרוזת, אחרת false.
הצג רמז
השתמש בסוג התחביר IsString<T> = T מרחיב מחרוזת ? נכון : שקר; כדי לבדוק את הסוג.
הפתרון זמין לאחר 3 ניסיונות
תרגיל 2: חילוץ טיפוס ממערך עם infer
הגדר סוג גנרי UnpackArray<T> שמשתמש ב-infer כדי לחלץ את סוג האלמנט של מערך T. אם T הוא מערך (לדוגמה U[]), החזר U, אחרת החזר את אותו סוג T.
הצג רמז
השתמש ב-T מרחיב (להסיק U)[] ? U : T כדי להכריז ולהחזיר את משתנה הסוג המוסיק U.
הפתרון זמין לאחר 3 ניסיונות