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

טיפוסים מילוליים והצהרות

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

טיפוסים מילוליים

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

TS
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;

light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLight

הצהרות סוג (as)

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

TS
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;

הקביעה אומרת למהדר: "תאמין לי, אני יודע שהאלמנט הזה הוא HTMLCanvasElement". הוא אינו מבצע בדיקות או השלכות בזמן ריצה; זה רק עוזר לבודק הסוג.

קביעות קונסטרוקציות (as const)

כאשר אנו מכריזים על אובייקט או מערך עם const, TypeScript עדיין מאפשר לשנות את המאפיינים הפנימיים שלו. על ידי הוספת as const בסוף, המבנה כולו מוקפא והופך לקריאה בלבד, וממיר את כל המאפיינים לסוגיהם המדויקים:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-only

סוגי תבניות מילוליות

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

TS
type Size = 'small' | 'large';
type Color = 'red' | 'blue';

// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

כלי עזר למחרוזות בסוגי תבניות מילוליות

TypeScript מספק סוגי עזר מיוחדים כדי לתפעל תווים ב-Template Literal Types:

  • Capitalize<StringType>: שימוש באות רישיות באות הראשונה של המחרוזת.
  • Uncapitalize<StringType>: מבטל את האות הראשונה של המחרוזת.
  • Uppercase<StringType>: ממיר את המחרוזת כולה לאותיות רישיות.
  • Lowercase<StringType>: ממיר את המחרוזת כולה לאותיות קטנות.
TS
type ActionType = 'click' | 'hover';

// Generates: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;

נסה זאת בעצמך

תרגיל 1: כיוון איחוד מילולי

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

הגדר סוג מילולי בשם Direction שמקבל רק את המחרוזות 'למעלה', 'למטה', 'שמאלה' או 'ימינה'. לאחר מכן הכריז על פונקציה בשם move(dir: Direction): מחרוזת שמחזירה את המחרוזת 'Moving' ואחריה הכיוון שהתקבל.

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

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

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

תרגיל 2: טענה על JSON.parse

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

הפונקציה JSON.parse מחזירה את כל סוג כברירת מחדל. שנה את הפונקציה parseUser כך שהתוצאה של JSON.parse(json) תוצג כסוג { שם משתמש: מחרוזת } באמצעות מילת המפתח as.

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

הוסף 'כמו { שם משתמש: מחרוזת }' מיד אחרי הקריאה JSON.parse(json).

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

תרגיל 3: תבנית מילולית לאירועים

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

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

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

השתמש ב-backticks כדי להגדיר את הסוג, ובתחביר ${Status}-${Action} בפנים.

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

תרגיל 4: תבנית מילולית עם אותיות רישיות

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

הגדר אירוע מסוג מילולי שיכול להיות 'קליק' או 'רחף'. לאחר מכן, השתמש ב-Template Literal Types כדי להכריז על סוג EventHandler המייצג מחרוזות בפורמט על ואחריו שם האירוע באותיות רישיות (כלומר, 'onClick' או 'onHover').

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

השתמש באותיות רישיות<Event> בתוך התבנית המילולית כדי להשתמש באות רישיות באות הראשונה של האירוע.

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