افهم حدود التعدادات enums، واشتق أنواعك من ثوابت مجمّدة باستخدام as const.
افتح هذا الدرس في Kodokonكان enum جزءًا من اللغة منذ أيامها الأولى، وستصادفه في كثير من قواعد الشيفرة. فهو يجمّع ثوابت مسماة تحت نوع واحد، صالحة للاستخدام كقيمة وكتوصيف على السواء.
enum Role {
User = "USER",
Admin = "ADMIN",
}
function canDelete(role: Role): boolean {
return role === Role.Admin;
}ومع ذلك، فإن المنظومة الحديثة تبتعد عنه. فالـenum صياغة غير موجودة في JavaScript: المترجم يُصدر كائنًا أثناء التشغيل، ما يعقّد بعض الأدوات ويتعارض مع خيار erasableSyntaxOnly. البديل: كائن عادي مجمَّد بـas const، منه تشتق النوع.
const ROLES = {
User: "USER",
Admin: "ADMIN",
} as const;
type Role = (typeof ROLES)[keyof typeof ROLES];
function canDelete(role: Role): boolean {
return role === ROLES.Admin;
}تعمل as const أيضًا على المصفوفات: يصير كل عنصر قيمة حرفية للقراءة فقط، وينتج (typeof SIZES)[number] اتحاد القيم. مصدر حقيقة واحد يغذّي الشيفرة العاملة والأنواع معًا.
const SIZES = ["sm", "md", "lg"] as const;
type Size = (typeof SIZES)[number];
function isSize(value: string): value is Size {
return (SIZES as readonly string[]).includes(value);
}