Vérification de la présence d'une valeur dans un Enum TypeScript : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi vérifier une valeur dans un Enum TypeScript ? Exemple concret tiré de la pratique

\n\n

Imaginez : vous écrivez un backend en Node.js avec TypeScript. Le client envoie un statut de commande — la chaîne "shipped". Vous avez un enum OrderStatus avec les variantes : Pending, Processing, Shipped, Delivered. Mais soudain, arrive "CANCELLED" ou "unknown". Que faire ? Exactement — vérifier si la valeur existe dans l'enum TypeScript.

\n\n

Cette tâche est l'une des plus fréquentes sur Stack Overflow (des milliers de vues). Et pour cause : l'enum en TypeScript n'est pas qu'un simple ensemble de constantes, c'est une bête complexe avec des variantes numériques et textuelles. Dans ce guide, nous allons analyser toutes les méthodes pour vérifier la présence d'une valeur dans un enum, des plus simples aux plus avancées, avec des exemples de code et des explications.

\n\n

Si vous débutez en TypeScript ou souhaitez approfondir vos connaissances, cet article est pour vous. C'est parti !

\n\n

Qu'est-ce qu'un Enum en TypeScript ? Petit rappel

\n\n

Un enum (énumération) est un moyen de définir un ensemble de constantes nommées. TypeScript propose deux types d'enum :

\n\n
    \n
  • Enums numériques — les valeurs sont automatiquement incrémentées (0, 1, 2...).
  • \n
  • Enums textuels — une chaîne est explicitement assignée à chaque membre.
  • \n
\n\n

Exemple d'enum numérique :

\n\n
enum Direction {\n    Up,    // 0\n    Down,  // 1\n    Left,  // 2\n    Right  // 3\n}
\n\n

Exemple d'enum textuel :

\n\n
enum Status {\n    Active = "ACTIVE",\n    Inactive = "INACTIVE",\n    Pending = "PENDING"\n}
\n\n

Pourquoi vérifier une valeur ? Parce que les données externes (API, formulaires, bases de données) peuvent être quelconques. Sans vérification, vous risquez d'obtenir undefined ou une erreur d'exécution.

\n\n

Méthode 1. La classique : Object.values() + includes()

\n\n

La méthode la plus populaire et lisible consiste à transformer l'enum en tableau de valeurs et à vérifier l'appartenance avec includes().

\n\n

Pour les enums textuels :

\n\n
enum Color {\n    Red = "RED",\n    Green = "GREEN",\n    Blue = "BLUE"\n}\n\nfunction isColor(value: string): boolean {\n    return Object.values(Color).includes(value as Color);\n}\n\nconsole.log(isColor("RED"));    // true\nconsole.log(isColor("YELLOW")); // false
\n\n

Pour les enums numériques — une astuce ! Object.values() retourne un mappage inversé (clés et valeurs). Il faut donc filtrer uniquement les nombres :

\n\n
enum NumberEnum {\n    A = 1,\n    B = 2,\n    C = 3\n}\n\nfunction isNumberEnumValue(value: number): boolean {\n    return Object.values(NumberEnum).filter(v => typeof v === 'number').includes(value);\n}\n\nconsole.log(isNumberEnumValue(2)); // true\nconsole.log(isNumberEnumValue(5)); // false
\n\n

Cette approche est universelle, mais nécessite de la prudence avec les enums numériques. Avantage : simple et claire. Inconvénient : il faut penser au filtrage.

\n\n

Méthode 2. Type Guard : vérification via les clés de l'enum

\n\n

Si vous avez besoin non seulement de vérifier la valeur, mais aussi d'obtenir une garantie de type, utilisez un type guard. Cette méthode est particulièrement utile lors du travail avec des API, où vous souhaitez affiner le type.

\n\n
enum UserRole {\n    Admin = "admin",\n    User = "user",\n    Guest = "guest"\n}\n\nfunction isUserRole(value: string): value is UserRole {\n    return Object.values(UserRole).includes(value as UserRole);\n}\n\nfunction processRole(role: string) {\n    if (isUserRole(role)) {\n        // TypeScript sait que role est de type UserRole\n        console.log(`Rôle : ${role}`);\n    } else {\n        console.log("Rôle inconnu");\n    }\n}\n\nprocessRole("admin"); // Rôle : admin\nprocessRole("moderator"); // Rôle inconnu
\n\n

Cette approche offre la sécurité des types et réduit le nombre de vérifications dans le code. Je la recommande pour les projets sérieux.

\n\n

Méthode 3. Helper personnalisé

Blogs

Book Recommendations