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

סוגי שירות

TypeScript מספק מספר סוגי עזר גלובליים כדי להקל על שינויי סוגים נפוצים. טיפוסים אלו הם גנריים ומאפשרים לבנות באופן הצהרתי סוגים חדשים מאלה הקיימים.

ארבעת סוגי השירות הנפוצים ביותר הם:

1. Partial<T>

הופך את כל המאפיינים מסוג T אופציונלי. זה שימושי ביותר עבור פונקציות עדכון/תיקון שבהן המתקשר עשוי לספק רק תת-קבוצה של שדות:

TS
interface User {
  id: number;
  name: string;
  email: string;
}

// All properties of User become optional: { id?: number; name?: string; email?: string; }
type UserUpdate = Partial<User>;

2. Readonly<T>

הופך את כל המאפיינים מסוג T לקריאה בלבד. כל ניסיון להקצות מחדש מאפיין יפעיל שגיאת מהדר בזמן הידור:

TS
interface Point {
  x: number;
  y: number;
}

const p: Readonly<Point> = { x: 10, y: 20 };
// p.x = 5; // Error: cannot assign to 'x' because it is a read-only property

3. Pick<T, Keys>

יוצר סוג על ידי בחירת רק קבוצה מסוימת של מפתחות (מיוצג על ידי איחוד מחרוזות) מהסוג T:

TS
interface Article {
  id: number;
  title: string;
  content: string;
  views: number;
}

// Selects only 'title' and 'views': { title: string; views: number; }
type ArticlePreview = Pick<Article, 'title' | 'views'>;

4. Omit<T, Keys>

יוצר סוג על ידי הסרת קבוצה מסוימת של מפתחות מהסוג T. זה הכפול של Pick:

TS
interface Product {
  id: number;
  name: string;
  price: number;
  secretVendorCode: string;
}

// Removes 'secretVendorCode': { id: number; name: string; price: number; }
type PublicProduct = Omit<Product, 'secretVendorCode'>;

5. Record<Keys, Type>

יוצר סוג אובייקט שמפתחות המאפיינים שלו הם Keys וערכי המאפיינים שלו הם Type. זה שימושי ביותר למיפוי מפתחות לערכים, ייצוג מילונים או טבלאות גיבוב (מפות מפתח-ערך):

TS
type Page = 'home' | 'about' | 'contact';

interface PageInfo {
  title: string;
}

// Creates a dictionary with keys 'home' | 'about' | 'contact' and values PageInfo
const nav: Record<Page, PageInfo> = {
  home: { title: 'Home Page' },
  about: { title: 'About Us' },
  contact: { title: 'Contact Us' },
};

נסה זאת בעצמך

תרגיל 1: עדכון פרופיל עם חלקי

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

השלם את הפונקציה updateProfile שמקבלת פרופיל מקורי (פרופיל) ואובייקט עדכונים (עדכונים) כאשר כל השדות של פרופיל הם אופציונליים. עליו להחזיר אובייקט Profile חדש המשלב את המאפיינים המקוריים עם העדכונים.

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

השתמש בסוג השירות Partial<Profile> עבור פרמטר העדכונים, ובאופרטור ההפצה כדי למזג את האובייקטים: { ...original, ...updates }.

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

תרגיל 2: הסרת שדות רגישים עם השמט

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

בהתחשב בסוג UserAccount, הגדר סוג כינוי בשם SafeUser שמשמיט את המאפיין הרגיש passwordHash.

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

השתמש בסוג SafeUser = השמט<UserAccount, 'passwordHash'>; כדי להשמיט את השדה שצוין.

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

תרגיל 3: תצורה ציבורית עם בחירה וקריאה בלבד

פעילות גופנית#ts.m4.l2.e3
ניסיונות: 0טוען...

בהתחשב בסוג AppConfig, הגדר כינוי טיפוס בשם PublicConfig שהוא גרסה לקריאה בלבד (Readonly) המכילה רק את מאפייני apiEndpoint ופורט שנבחרו באמצעות Pick.

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

השתמש בסוג PublicConfig = Readonly<Pick<AppConfig, 'apiEndpoint' | 'נמל'>>;

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

תרגיל 4: רישום משתמשים עם רשומה וקריאה בלבד

פעילות גופנית#ts.m4.l2.e4
ניסיונות: 0טוען...

בהינתן ממשק משתמש עם שדות מזהה: מספר ושם: מחרוזת, צור סוג ReadOnlyUser שהופך את כל השדות ב-User לקריאה בלבד. לאחר מכן, צור סוג UserRegistry המייצג מילון שבו המפתח הוא מחרוזת (למשל, מזהה מחרוזת) והערך הוא ReadOnlyUser.

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

השתמש Readonly<User> כדי להגדיר ReadOnlyUser, והקלט<string, ReadOnlyUser> עבור הרישום.

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