Comprenez les limites des enums et dérivez vos types depuis des constantes figées avec as const.
Ouvrir cette leçon dans KodokonLes enum font partie du langage depuis ses débuts, et vous en croiserez dans beaucoup de bases de code. Ils regroupent des constantes nommées sous un même type, utilisable à la fois comme valeur et comme annotation.
enum Role {
User = "USER",
Admin = "ADMIN",
}
function canDelete(role: Role): boolean {
return role === Role.Admin;
}Pourtant, l'écosystème moderne s'en détourne. Un enum est une syntaxe qui n'existe pas en JavaScript : le compilateur génère un objet à l'exécution, ce qui complique certains outils et est incompatible avec l'option erasableSyntaxOnly. L'alternative : un objet ordinaire figé avec as const, dont on dérive le type.
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 fonctionne aussi sur les tableaux : chaque élément devient un littéral en lecture seule, et (typeof SIZES)[number] produit l'union des valeurs. Une seule source de vérité alimente à la fois le code exécuté et les types.
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);
}