TypeScript fournit à la fois des énumérations numériques et des énumérations basées sur des chaînes.enum.enum numérique où Up est initialisé avec 1.
Tous les membres suivants sont auto-incrémentés à partir de ce moment.
En d'autres termes, Direction.Up a la valeur 1, Down a 2, Left a 3 et Right a 4.Up aurait la valeur 0, Down aurait 1, etc...
Ce comportement d'auto-incrémentation est utile dans les cas où nous ne nous soucions peut-être pas des valeurs de membre elles-mêmes,
mais que chaque valeur soit distincte des autres valeurs du même enum.enum lui-même.JavaScript de manière intelligente, il est conseillé de ne pas le faire.enum est associé à une valeur qui peut être constante ou calculée.
Un membre enum est considéré comme constant si :0 :enum précédent était une constante numérique.
Dans ce cas, la valeur du membre enum actuel sera la valeur du membre enum précédent plus un.enum est initialisé avec une expression enum constante.
Une expression constante enum est un sous-ensemble d'expressions TypeScript qui peuvent être entièrement évaluées lors de la compilation.
Une expression est une expression constante enum si elle est :+, -, ~ appliqué à l' expression de la constante enum+, -, *, /, %, <<, >>, >>>, &, |, ^ Opérateurs binaires avec des expressions enum constantes comme opérandes. Il est une erreur de compilation pour les expressions ENUM constantes à évaluer à NaNou Infinity.enum est considéré comme calculé.enum constant qui ne sont pas calculés : les membres enum littéraux.
Un membre enum littéral est un membre enum constant sans valeur initialisée ou avec des valeurs initialisées àfoo", "bar", "baz")1, 100)-) unaire appliqué à n'importe quel littéral numérique (par exemple -1, -100)enum deviennent aussi des types !
Par exemple, nous pouvons dire que certains membres ne peuvent avoir la valeur d'un membre enum :enum eux-mêmes deviennent effectivement une union de chaque membre enum.
Bien que nous n'ayons pas encore discuté des types d'union , tout ce que vous devez savoir, c'est qu'avec les énumérations d'unions,
le système de types est capable de tirer parti du fait qu'il connaît le jeu exact de valeurs qui existent dans le enum.
à cause de cela, TypeScript peut attraper des bugs stupides où nous pourrions être en train de comparer des valeurs de manière incorrecte.x n'était pas le cas E.Foo.
Si cette vérification réussit, nous allons court-circuiter || et le corps du "si" sera exécuté.
Cependant, si la vérification échoue, x ne peut en être E.Foo ainsi,
il n'a donc aucun sens de savoir si elle est égale à E.Bar.enum en noms de enum.TypeScript pourrait compiler ceci en quelque chose comme le JavaScript suivant :name-> value) et inverses (value-> name). Les références à d'autres membres
de l'énumération sont toujours émises en tant qu'accès à la propriété et ne sont jamais alignées.String enum ne reçoivent pas du tout de mappage inverse.enum sont une solution parfaitement valable.
Cependant, les exigences sont parfois plus strictes. Pour éviter de payer le coût supplémentaire
de code généré et d'indirection supplémentaire lors de l'accès à des valeurs enum,
il est possible d'utiliser des énumérations const. Les énumérations constantes
sont définies à l'aide du modificateur const de nos énumérations :const enum sont en ligne sur les sites d'utilisation.
Cela est possible car les énumérations constantes ne peuvent pas avoir de membres calculés.enum précédent est considéré comme constant.
En revanche, un membre enum ambiant (et non-const) qui ne possède pas d'initialiseur est toujours considéré
comme étant calculé.