TypeScript - חלק ד': איך כותבים Enum

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

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

 

איך כותבים Enum ב-JavaScript

מכיון שאין Enum מובנה ב-JavaScript אנו ניצור משהו דומה בעזרת משתנה שיהיה מסוג אובייקט ויכיל את הערכים שנרצה. לצורך הדוגמא ניצור Enum שמכיל את ימי השבוע

var DaysOfWeekEnum = {
    Sunday: 1,
    Monday: 2,
    Tuesday: 3,
    Wednesday: 4,
    Thursday: 5,
    Friday: 6,
    Saturday: 7
};

כעת נראה איך ניתן להשתמש בו בקוד:

// Example 1
var dayOfWeekByName = DaysOfWeekEnum.Friday;
console.log('dayOfWeekByName:' + dayOfWeekByName);  //dayOfWeekByName:6

// Example 2
var dayOfWeekByName = DaysOfWeekEnum.GreenDay;
console.log('dayOfWeekByName:' + dayOfWeekByName);  //dayOfWeekByName:undefined

בדוגמא שמעל ניתן לראות מספר אפשריות של שימוש ב-Enum.

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

בדוגמא הראשונה כאשר נשתמש ב-Enum בערך Friday שהוא חוקי נקבל את הערך 6 כפי שהגדרנו ב-Enum אך בדוגמא השניה בחרתי ערך שהוא לא ב-Enum שלנו (GreenDay) ואין לי דרך באמת לוודא שמי שבחר את הערך שהוא ערך חוקי שקיים ב-Enum (לפחות בלי לחקור את הקוד), ובגלל שהערך שהוא בחר לא קיים נקבל undefined.

 

 

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

 

כעת נראה מה קורה כאשר נרצה לכתוב Enum ב-TypeScript.

 

 

איך כותבים Enum ב-TypeScript

יצירת Enum ב-TypeScript מתחילה עם מילת המפתח enum ולאחר מכן הערכים שהיא מכילה:

enum DaysOfWeekEnum {
    Sunday = 1,
    Monday = 2,
    Tuesday = 3,
    Wednesday = 4,
    Thursday = 5,
    Friday = 6,
    Saturday = 7
};

כעת נראה בדוגמא הבאה איך נשתמש בו:

// Example 1
var dayOfWeekByName: DaysOfWeekEnum = DaysOfWeekEnum.Friday;
console.log('dayOfWeekByName:' + dayOfWeekByName);  //dayOfWeekByName:6

// Example 2
dayOfWeekByName = DaysOfWeekEnum.GreenDay;      
//Error: Property 'GreenDay' does not exist on type 'typeof DaysOfWeekEnum'

 

בדוגמא הראשונה הגדרנו את ערך המשתנה להיות Friday שהוא ערך חוקי ב-Enum שלנו, אך בדוגמא השניה הגדרנו לו ערך אחר שלא קיים (GreenDay) ולכן קיבלנו שגיאת קומפילציה שהערך לא קיים ב-Enum שלנו DaysOfWeekEnum ולכן לא נוכל להשתמש בו.

 

תגיות:

הוסף תגובה