הסוג המצוין של TypeScript הוא דרך שימושית לאריזת ערכים קשורים, עם משמעות ברורה.
Enum, או סוג מסופר, הוא מבנה נתונים המאפשר לך להגדיר קבוצה של ערכים בעלי שם.
Enums מספקים דרך לייצג סט קבוע של ערכים כקבועים. הם יכולים לעזור להפוך את הקוד שלך ליותר אקספרסיבי ומתעד עצמי על ידי מתן שמות משמעותיים לערכים ספציפיים. כאן תלמד כיצד אתה יכול להשתמש ב-enums ב-TypeScript.
יצירת Enum
Enums מייצגים בדרך כלל מספר קבוע של אפשרויות עבור ערך נתון. לדוגמה, לרשימה המייצגת צבעי יסוד עשויים להיות ערכים קבועים עבור אדום, צהוב וכחול.
Enums מייצגים נתונים כקבוצה של זוגות מפתח/ערך המכונה איברי enum. המפתח חייב להיות תמיד מיתר. עם זאת, הערך - מספר הגדלה אוטומטית כברירת מחדל - יכול להיות מספרי, מחרוזת או מחושב.
אתה יכול ליצור Enum ב שפת TypeScript משתמש ב enum מילת מפתח. עקוב אחריו עם שם ה-enum וזוג פלטה מתולתלת ({}) המכיל את חברי ה-enum. מוסכמות שמות נפוצה של JavaScript קובע ששמות ה-enum צריכים להתחיל באות גדולה.
enum כיוון {
לְמַעלָה,
מטה,
שמאלה,
ימין
}
דוגמה זו מציגה enum בשם כיוון. ל-Enum יש איבר המייצג כל כיוון: למעלה, למטה, שמאלה וימין.
מכיוון שקוד זה אינו מציין ערך עבור כל אחד מהמפתחות, TypeScript יקצה ערכים באופן אוטומטי. לאיבר הראשון, Up, יהיה ערך של 0. כל אחד מהחברים הנותרים יהיה בעל ערך 1 גדול מזה של החבר הקודם. אתה יכול להצהיר על כך במפורש אם אתה מתקשה לזכור:
enum כיוון {
למעלה = 0,
למטה = 1,
שמאל = 2,
נכון = 3,
}
לחלופין, אתה יכול להצהיר במפורש על ערכים שונים, ולהשאיר ערכים לא מוצהרים להמשיך ולהגדיל כמו קודם:
enum סטטוס {
פעיל = 9,
לֹא פָּעִיל, // 10
}
בדוגמה זו, לחבר הבלתי פעיל יש ערך של 10. התנהגות זו חלה על ערכים מספריים בלבד, לא אלה עם מחרוזת או איברים הטרוגניים.
הסוגים השונים של Enum
ל-Enums ב-TypeScript יש סוג מרומז שהם מבססים על סוג הערכים שהחברים שלהם מחזיקים. הסוג הנפוץ ביותר הוא ה-enum המספרי, שהתנהגותו הסעיף הקודם מכסה, אך ישנן שתי וריאציות.
תקצירי מחרוזת
Enum מחרוזת הוא Enum שבו כל האיברים שלו הם מחרוזות. שלא כמו מקדים מספריים, שבהם ערכים מוקצים אוטומטית, עליך לאתחל כל איבר במחרוזת:
enum צבעים ראשיים {
אדום = "אָדוֹם",
צהוב = "צהוב",
כחול = "כְּחוֹל"
}
למרות שלמרומי מחרוזת אין מאפייני הגדלה אוטומטית, הם עשויים להיות הגיוניים יותר אם תבצע אותם בסידרה. הערכים שלהם עדיין צריכים להיות תיאוריים, ללא שמות חברים, בעוד שקבוצה של ערכים מספריים לא יכולה להיות מתארת את עצמה.
Enums הטרוגניים
ערכים הטרוגניים הם ערכים המכילים איברים מספריים ואיברי מחרוזת כאחד. לדוגמה:
enum תוצאה {
הצלחה = "הַצלָחָה",
כישלון = 0
}
ספירות הטרוגניות שימושיות כאשר יש לך איברי ספירה הדורשים סוגי ערכים שונים בהתבסס על ההקשר או המשמעות הספציפיים של כל חבר. אולם, ה תיעוד TypeScript מונע משימוש ב-enums הטרוגניים מכיוון שהם מציגים מורכבות שיכולה להפוך את הקוד שלך מועד יותר לשגיאות.
חברים ממוחשבים וקבועים
לכל איבר enum יש ערך, שיכול להיות קבוע או מחושב.
חברי Enum קבועים
איבר enum הוא קבוע אם הוא עומד באחד מהתנאים שלהלן.
- זה החבר הראשון ב-enum ואין לו אתחול.
- אין לו אתחול, ואיבר ה-enum הקודם היה קבוע מספרי.
- הוא מאותחל עם ביטוי אנדום קבוע.
על פי התיעוד של TypeScript, ביטוי enum קבוע הוא תת-קבוצה של ביטויי TypeScript שניתן להעריך באופן מלא בזמן הידור. לדוגמה, מחרוזת או מילולית מספרית.
לדוגמה, האיברים של ה-enums בגוש הקוד שלהלן כולם קבועים:
// תיק 1
enum כיוון {
לְמַעלָה,
מטה,
שמאלה,
ימין
}// מקרה 2
enum יום חול {
יום שני = 1,
יוֹם שְׁלִישִׁי,
יום רביעי,
יוֹם חֲמִישִׁי,
יוֹם שִׁישִׁי
}
// מקרה 3
enum עונה {
אביב = "אביב",
קיץ = "קַיִץ",
סתיו = "סתָיו",
חורף = "חוֹרֶף"
}
כאשר אתה מעביר את חברי ה-enum הקבועים ל-JavaScript רגיל, הקוד שנוצר משתמש בערכים המילוליים שלהם. זה יכול להועיל לביצועים ולהקל על ניפוי באגים.
לדוגמה, הנה הגרסה המוטרפת של תקציר העונה:
var עונה;
(פוּנקצִיָה (עונה) {
עונה["אביב"] = "אביב";
עונה["קַיִץ"] = "קַיִץ";
עונה["סתָיו"] = "סתָיו";
עונה["חוֹרֶף"] = "חוֹרֶף";
})(עונה || (עונה = {}));
חברים ב-Enum מחושבים
אתה יכול להשתמש באיברי enum מחושבים כדי להקצות ערכים לאיברי enum בהתבסס על ביטויים או חישובים דינמיים אחרים. לדוגמה:
enum גודל {
קטן = 1,
בינוני = calculateSize(12),
גדול = חשב גודל(5)
}פוּנקצִיָהלחשב גודל(ערך: מספר): מספר{
לַחֲזוֹר ערך * 5;
}
לְנַחֵם.log (גודל. גָדוֹל)
ה גודל ל-enum יש שלושה חברים: קָטָן, בינוני, ו גָדוֹל. הוא מקצה במפורש את הערך 1 לאיבר הקטן. ה בינוני ו גָדוֹל חברים משתמשים בפונקציה לחשב גודל כדי לחשב את הערכים שלהם בזמן ריצה.
כאשר עובדים עם חברים ב-enum מחושבים, חשוב לשים לב שהערכים אינם ידועים עד לזמן הריצה. זה עשוי להכניס יותר מורכבות ופוטנציאל שגיאות זמן ריצה בהשוואה לחברי enum עם ערכים קבועים.
לדוגמה:
var גודל;
(פוּנקצִיָה (גודל) {
מידה[גודל["קָטָן"] = 1] = "קָטָן";
מידה[גודל["בינוני"] = calculateSize(12)] = "בינוני";
מידה[גודל["גָדוֹל"] = calculateSize(5)] = "גָדוֹל";
})(גודל || (גודל = {}));
לְנַחֵם.עֵץ(גודל.גָדוֹל)
בלוק הקוד שלמעלה הוא הגרסה המוטרפת של ה- גודל enum. שימו לב כיצד TypeScript אינו כולל את ערכי ההחזרה מ-calculateSize() בקוד JavaScript. במקום זאת, הוא כולל את קריאת הפונקציה המקורית כך ש-JavaScript קובע את הערכים בזמן ריצה.
גישה לערכי Enum
אתה יכול לגשת לערכים של איברי enum באמצעות סימון נקודות האובייקט.
לדוגמה:
enum כיוון {
למעלה = 0,
למטה = 1,
שמאל = 2,
נכון = 3,
}
לְנַחֵם.log (כיוון. שמאלה) // 2
ספירות מספריות של מיפוי הפוך
מיפוי הפוך ב-enums מספרי מתייחס ליכולת להביא את שם איבר ה-enum המתאים מערכו. זה יכול להיות שימושי במיוחד כאשר עובדים עם ערכים מספריים, שאולי תצטרך לפענח.
כברירת מחדל, ערכי enum ב-TypeScript ממופים קדימה, כלומר אתה יכול לגשת רק לערך המשויך לשם. עם זאת, ניתן לבצע מיפוי הפוך באופן ידני כדי לאחזר את איבר ה-enum בהתבסס על ערכו.
לדוגמה:
enum כיוון {
למעלה = 1,
מטה,
שמאלה,
ימין
}פוּנקצִיָהgetDirectionName(directionValue: מספר): חוּט{
// מיפוי הפוך
const directionName = Direction[directionValue];
לַחֲזוֹר directionName;
}
לְנַחֵם.log (getDirectionName(1)); // "למעלה"
לְנַחֵם.log (getDirectionName(3)); // "שמאלה"
זֶה getDirectionName הפונקציה מבצעת מיפוי הפוך על ידי גישה לשם איבר ה-enum תוך שימוש בערך שלה כאינדקס. הפונקציה לוקחת א directionValue כארגומנט ומחזיר את שם איבר ה-enum המתאים באמצעות כיוון[directionValue].
מיפוי הפוך יכול להיות שימושי בתרחישים שבהם יש לך ערך מספרי ואתה צריך לקבוע את שם חבר ה-enum המתאים. זה מספק דרך נוחה לעבוד עם מנופים הן קדימה והן בכיוון אחורה.
ישנם יישומים רבים של Enums
אתה יכול להשתמש ב-enums בתרחישים שונים, כגון טיפול בהצהרות מתג, הגדרת פרמטרים של פונקציות, מיפוי נתונים וייצוג אפשרויות או הגדרות.
בין אם אתה צריך לייצג קבוצה סופית של אפשרויות או לנהל מעברי מצב מורכבים, enums ב-TypeScript הם כלי רב ערך כדי לשפר את הבהירות והמבנה של הקוד שלך.