التعدادات (Enums)
تجمع مجموعة ثوابت مترابطة تحت اسم واحد، لتجنّب الأرقام/النصوص السحرية:
enum Direction {
Up,
Down,
Left,
Right,
}
let move: Direction = Direction.Up;
console.log(move); // 0 (تبدأ من الصفر تلقائيًّا)
تعدادات نصّية (String Enums)
الأوضح والأكثر استخدامًا عمليًّا:
enum Status {
Active = "ACTIVE",
Inactive = "INACTIVE",
Pending = "PENDING",
}
function setStatus(s: Status) {
console.log(s);
}
setStatus(Status.Active); // "ACTIVE"
الأنواع الحرفية (Literal Types)
بديل أخفّ من Enums — نقيّد المتغيّر لقيم نصّية محدّدة بالضبط:
let size: "small" | "medium" | "large";
size = "medium"; // صحيح
size = "huge"; // خطأ! ليست ضمن القيم المسموحة
تتألّق في معاملات الدوال:
function setAlign(align: "left" | "center" | "right") {
// ...
}
setAlign("center"); // صحيح
setAlign("top"); // خطأ فوري
Enum أم Literal Type؟
| الحالة | الأفضل |
|---|---|
| مجموعة قيم بسيطة كمعامل | Literal Types (أخفّ) |
| ثوابت مُعاد استخدامها في أماكن كثيرة | Enum |
أخطاء شائعة
- الاعتماد على القيم الرقمية الضمنية للـ Enum ثم تغيّر الترتيب فتفسد البيانات — استخدم Enums نصّية.
- كتابة نفس اتحاد القيم الحرفية مرارًا بدل تجميعه في
type.
🎯 التالي: الأسماء البديلة (Type) مقابل الواجهات (Interface).