Les enums TypeScript et leurs alternatives

Enums TypeScript

Enum TypeScript : numérique, string, const et alternatives | We.Inc

Générez des enums numériques, string et const à partir de vos propres noms de membres, voyez le JavaScript exact que chacun émet, et comparez-les aux objets as const et aux unions de littéraux.

Un enum donne un type unique à un ensemble de constantes nommées. Les enums numériques comptent à partir de 0 et associent aussi les nombres aux noms ; les enums string exigent un littéral par membre et n'ont pas de reverse mapping ; les const enums sont insérés en ligne et disparaissent. Contrairement à la plupart du TypeScript, les enums classiques émettent du vrai JavaScript, c'est pourquoi beaucoup d'équipes préfèrent les objets as const.

Cinq façons de modéliser un ensemble fixe de valeurs

Saisissez des noms de membres dans le générateur et passez d'un style à l'autre. Il écrit la déclaration TypeScript et le JavaScript que le compilateur produirait, pour que vous voyiez le coût de chaque choix avant qu'il n'arrive dans votre bundle.

Questions fréquentes

Qu'est-ce qu'un reverse mapping ?

Pour les enums numériques, tsc stocke les deux sens sur l'objet : Direction.Up vaut 0 et Direction[0] vaut la chaîne Up. Les membres string n'ont pas d'entrée inverse, car la valeur pourrait entrer en conflit avec le nom d'un autre membre.

Pourquoi ne puis-je pas passer une simple chaîne à une fonction qui attend un enum string ?

Les membres d'un enum string sont des types distincts. Le compilateur signale que le littéral n'est pas assignable à l'enum, les appelants doivent donc écrire Status.Draft. Si vous voulez que les appelants passent le littéral, utilisez plutôt une union de littéraux string.

Comment parcourir les valeurs d'un enum ?

Pour un enum string, Object.values(MyEnum) renvoie les valeurs. Pour un enum numérique, l'objet contient aussi les clés inverses, il faut donc filtrer : Object.values(MyEnum).filter((v) => typeof v === 'number').

Les enums sont-ils dépréciés ?

Non. Ils font toujours partie de TypeScript. L'option plus récente erasableSyntaxOnly, ajoutée dans TypeScript 5.8, permet simplement aux projets qui reposent sur le type stripping de les interdire, car un enum ne peut pas être retiré en supprimant les annotations.

Node.js exécute-t-il directement les fichiers contenant des enums ?

Pas avec le type stripping par défaut. La documentation de Node range les déclarations d'enum parmi les fonctionnalités qui nécessitent une génération de code et ne sont pas prises en charge dans ce mode : compilez-les donc avec tsc ou un autre transformateur, ou passez à un objet as const.

Enums numériques : compacts mais fragiles

Enums string : lisibles et stricts

Le motif as const

Les trois types d'enum et ce qu'ils émettent

Enum numérique avec une valeur de départ

Mid et High continuent de compter à partir de Low. L'objet produit fait la correspondance dans les deux sens.

Enum string

Chaque membre est assigné une seule fois, sans entrée inverse.

const enum

La déclaration disparaît et chaque utilisation devient sa valeur.

Alternatives effaçables

Objet as const plus une union dérivée

Fonctionne avec le type stripping, s'itère avec Object.values et accepte la chaîne brute.

Union simple quand aucune liste à l'exécution n'est nécessaire

Entièrement effacée ; le compilateur rejette quand même toute autre chaîne.

Interdire les enums dans un projet en type stripping

Avec cette option, une déclaration d'enum est une erreur de compilation.

Enum numérique

Enum string

const enum

Objet as const

Type union

Générateur d'enum

Nom du type

Membres (séparés par des virgules)

Premier nombre

Style d'enum

TypeScript

JavaScript émis

Copier le TypeScript

Copier le JavaScript

Utilisez des noms qui commencent par une lettre, $ ou _, et ne contiennent que des lettres, chiffres, $ ou _, sans nom en double.

{n} membres

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site