Comprende los límites de los enums y deriva tus tipos de constantes congeladas con as const.
Abrir esta lección en Kodokonenum forma parte del lenguaje desde sus inicios, y te lo encontrarás en muchísimas bases de código. Agrupa constantes con nombre bajo un único tipo, utilizable tanto como valor como en una anotación.
enum Role {
User = "USER",
Admin = "ADMIN",
}
function canDelete(role: Role): boolean {
return role === Role.Admin;
}Sin embargo, el ecosistema moderno se aleja de él. Un enum es sintaxis que no existe en JavaScript: el compilador emite un objeto en tiempo de ejecución, lo que complica ciertas herramientas y es incompatible con la opción erasableSyntaxOnly. La alternativa: un objeto sencillo congelado con as const, del que derivas el tipo.
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 también funciona con arrays: cada elemento se convierte en un literal de solo lectura, y (typeof SIZES)[number] produce la unión de los valores. Una única fuente de verdad alimenta a la vez el código en ejecución y los tipos.
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);
}