מערכים, Tuples ו-Enums
אחרי ערכים בודדים, השלב הבא הוא אוספים: רשימות של ערכים מאותו סוג, זוגות עם מבנה קבוע, וקבוצה סגורה של אפשרויות.
מערכים
const scores: number[] = [90, 85, 77];
const names: Array<string> = ['דנה', 'יוסי']; // אותו דבר, תחביר אחר
scores.push('מאה');
// Argument of type 'string' is not assignable to parameter of type 'number'.
const firstName = names[0]; // string
const mixed = [1, 'שתיים']; // (string | number)[]
שני התחבירים זהים. number[] נפוץ יותר.
גישה לאינדקס שלא קיים
שימו לב: TypeScript מניחה ש-names[5] הוא string, למרות שבפועל הוא undefined. ההגדרה "noUncheckedIndexedAccess": true ב-tsconfig מתקנת את זה, ומכריחה לבדוק:
// עם noUncheckedIndexedAccess
const third = names[2]; // string | undefined
console.log(third?.length); // ✅ צריך ?. או בדיקה
מערכים לקריאה בלבד
function average(values: readonly number[]): number {
values.push(0);
// Property 'push' does not exist on type 'readonly number[]'.
return values.reduce((sum, value) => sum + value, 0) / values.length;
}
פונקציה שמקבלת readonly מבטיחה למי שקורא לה שהיא לא תשנה את המערך שלו.
Tuples: מערך עם מבנה קבוע
// בדיוק שני איברים: מספר ואז מחרוזת
let entry: [number, string] = [1, 'דנה'];
const [id, label] = entry; // id: number, label: string
// עם שמות, לקריאוּת
type Point = [x: number, y: number];
const origin: Point = [0, 0];
אם זה מוכר לכם, זה בדיוק מה ש-useState ב-React מחזיר: [value, setValue].
Enums, והחלופה המודרנית
enum מגדיר קבוצה סגורה של ערכים עם שמות:
enum Role {
Admin = 'admin',
Editor = 'editor',
Viewer = 'viewer',
}
const role: Role = Role.Editor;
ב-2026 רוב הצוותים מעדיפים איחוד של ערכים (Literal Union), מכמה סיבות: הוא לא מייצר קוד JavaScript נוסף, הוא עובד כשמריצים .ts ישירות ב-Node.js (ששם enum לא נתמך), והוא פשוט יותר:
type Role = 'admin' | 'editor' | 'viewer';
const role: Role = 'editor'; // מחרוזת רגילה, עם בדיקה
צריכים גם רשימה של הערכים בזמן ריצה (למשל לתפריט)? as const:
const ROLES = ['admin', 'editor', 'viewer'] as const;
type Role = (typeof ROLES)[number]; // 'admin' | 'editor' | 'viewer'
ROLES.forEach((role) => console.log(role)); // עובד גם בזמן ריצה
as const אומר: "זה לא סתם מערך של מחרוזות, אלה בדיוק הערכים האלה, ואי אפשר לשנות אותם".
סיכום
string[]למערך,readonly string[]כשלא משנים אותו.- Tuple כשהמבנה קבוע:
[number, string]. - במקום
enum:type Role = 'a' | 'b', ו-as constכשצריך את הרשימה בזמן ריצה.
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה הטיפוס של
[number, string]?הצגת התשובה
תשובה א. Tuple מגדיר אורך וסדר קבועים.
-
מה החלופה המודרנית הנפוצה ל-
enum?הצגת התשובה
תשובה א. הוא לא מייצר קוד, ועובד כשמריצים .ts ישירות ב-Node.js.