שומרי סוג TypeScript

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

מהם סוג שומרים?

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

  • פרדיקטים מסוג מוגדר על ידי משתמש
  • סוג קביעות
  • בדיקות מופע
  • שימוש באופרטור typeof
  • שימוש באופרטור in

פרדיקטי סוגים בהגדרת משתמש

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

function isString(value: any): value is string {
  return typeof value === 'string';
}

function printString(value: any) {
  if (isString(value)) {
    console.log(value.toUpperCase()); // TypeScript knows value is a string here
  } else {
    console.log('Not a string');
  }
}

בדוגמה שלמעלה, isString הוא פרדיקט טיפוס המוגדר על ידי המשתמש שעוזר ל-TypeScript להבין ש-value הוא מחרוזת בתוך הבלוק if.

סוג הצהרות

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

function printLength(value: any) {
  console.log((value as string).length); // Assert value is a string
}

בדוגמה זו, value as string אומר ל-TypeScript להניח ש-value הוא מחרוזת ללא ביצוע בדיקת זמן ריצה.

בדיקות מופע

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

class Dog {
  bark() { console.log('Woof'); }
}

class Cat {
  meow() { console.log('Meow'); }
}

function speak(animal: Dog | Cat) {
  if (animal instanceof Dog) {
    animal.bark(); // TypeScript knows animal is a Dog here
  } else {
    animal.meow(); // TypeScript knows animal is a Cat here
  }
}

בדוגמה זו, האופרטור instanceof עוזר ל-TypeScript להסיק את הסוג של animal על סמך המחלקה שלו.

שימוש באופרטור typeof

ניתן להשתמש באופרטור typeof כדי לבדוק טיפוסים פרימיטיביים כגון string, number ו-בוליאני:

function processValue(value: string | number) {
  if (typeof value === 'string') {
    console.log(value.toUpperCase()); // TypeScript knows value is a string here
  } else {
    console.log(value.toFixed(2)); // TypeScript knows value is a number here
  }
}

כאן, typeof משמש כדי לבדוק אם value הוא מחרוזת או מספר ומצמצם את הסוג בהתאם.

שימוש באופרטור in

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

interface Bird {
  fly: () => void;
}

interface Fish {
  swim: () => void;
}

function move(creature: Bird | Fish) {
  if ('fly' in creature) {
    creature.fly(); // TypeScript knows creature is a Bird here
  } else {
    creature.swim(); // TypeScript knows creature is a Fish here
  }
}

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

מַסְקָנָה

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