שיעורי מודול (2/2)
סוגים ממופים
טיפוסים ממופים מאפשרים לך ליצור סוגים חדשים על ידי שינוי המאפיינים של הקיימים, אחד אחד. הם בנויים על גבי תחביר לולאה מעל מקשים באמצעות האופרטור keyof.
type Mapped<T> = {
[P in keyof T]: T[P];
};דוגמה זו מציגה סוג ממופה זהה לזה המקורי: הוא חוזר על כל מקש P ב-keyof T ומקצה את אותו סוג T[P].
שינויי שינוי ואופציונליות
אנו יכולים להוסיף או להסיר מתקנים כמו readonly ו-? (אופציונליות) על ידי הקדמתם + (הוסף, ברירת מחדל) או - (הסר).
לדוגמה, כדי להסיר אופציונליות מכל המאפיינים של סוג (מה שהופך אותם לנדרש):
type Concrete<T> = {
[P in keyof T]-?: T[P];
};השינוי -? מסיר את דגל האופציונליות מכל מאפיין.
מיפוי מחדש של מפתחות עם as
ב-TypeScript 4.1+, אתה יכול למפות מחדש מפתחות בסוג ממופה באמצעות הסעיף as והסוגים המילוליים של התבנית.
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};כאן אנו משנים את השם של כל מאפיין K ל-set[CapitalizedKey] ומשנים את הסוג שלו לפונקציית מגדיר.
נסה זאת בעצמך
תרגיל 1: הפיכת מאפיינים לבטלים
הכריז על סוג ממופה גנרי Nullable<T> שלוקח אובייקט T והופך כל מאפיין כך שהוא יכול לקבל גם את הערך null (למשל T[K] | null).
הצג רמז
השתמש בתחביר [K במפתח T]: T[K] | בָּטֵל; בתוך האובייקט מסוג ממופה.
הפתרון זמין לאחר 3 ניסיונות
תרגיל 2: יצירת מגברים דינמיים עם as
צור סוג ממופה בשם GetterNames<T> שהופך את המפתחות של האובייקט T על ידי הקדמת 'get' ושימוש באותיות רישיות במפתח המקורי (השתמש באותיות רישיות). לדוגמה, אם מפתח הוא שם, הוא צריך להפוך ל-getName. הגדר את סוג המאפיינים ל-() => T[K].
הצג רמז
השתמש בתור \`get\${Capitalize<string & K>}\` כדי למפות מחדש את המפתח וב-() => T[K] כסוג החזרת המאפיין.
הפתרון זמין לאחר 3 ניסיונות