Je voudrais itérer un TypeScript un enum
type et obtenir chaque nom de symbole énuméré, par exemple:
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
la source
la source
getAllEnumValues
etgetAllEnumKeys
pour votre butRéponses:
Le code que vous avez publié fonctionnera; il imprimera tous les membres de l'énumération, y compris les valeurs des membres de l'énumération. Par exemple, le code suivant:
Imprime ce qui suit:
Si vous ne souhaitez que les noms de membres et non les valeurs, vous pouvez faire quelque chose comme ceci:
Cela n'imprimera que les noms:
Avertissement: cela s'appuie légèrement sur un détail d'implémentation: TypeScript compile les énumérations en un objet JS avec les valeurs d'énumération membres de l'objet. Si TS décidait de les implémenter différemment à l'avenir, la technique ci-dessus pourrait échouer.
la source
+enumMember >= 0
devrait êtreisFinite(+enumMember)
dû au fait que les valeurs négatives ou à virgule flottante sont également inversées. ( Aire de jeux )Bien que la réponse soit déjà fournie, presque personne n'a pointé les documents
Voici un extrait
Gardez à l'esprit que les membres d'énumération de chaîne n'obtiennent pas du tout de mappage inverse.
la source
0
ou1
de cette énumération?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
? À partir de [email protected] cela fonctionne très bien pour moi ...En supposant que vous respectiez les règles et ne produisiez que des énumérations avec des valeurs numériques, vous pouvez utiliser ce code. Cela gère correctement le cas où vous avez un nom qui est par coïncidence un nombre valide
la source
Pour moi, une façon plus simple, pratique et directe de comprendre ce qui se passe, c'est que l'énumération suivante:
Sera converti essentiellement en ceci:
Pour cette raison, ce qui suit sera vrai:
Cela crée un moyen facile d'obtenir le nom d'un énuméré comme suit:
Il crée également un bon moyen de convertir une chaîne en une valeur énumérée.
Les deux situations ci-dessus sont une situation beaucoup plus courante, car généralement vous êtes beaucoup plus intéressé par le nom d'une valeur spécifique et la sérialisation des valeurs de manière générique.
la source
Si vous recherchez uniquement les noms et que vous réitérez ultérieurement, utilisez:
la source
Object.values(myEnum).filter(value => typeof value === 'string') as string[];
Object.values(myEnum).filter(value => typeof value === 'string').map(key => { return {id: myEnum[key], type: key }; });
Avec la version 1.8.9 de TypeScript actuelle, j'utilise des énumérations typées:
avec des résultats dans cet objet Javascript:
donc je dois interroger les clés et les valeurs et ne retourner que les valeurs:
Et je reçois les clés d'option dans un tableau:
la source
Depuis TypeScript 2.4, les énumérations peuvent contenir des initialiseurs de chaîne https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Cela vous permet d'écrire:
et obtenez cette sortie:
la source
Cette solution fonctionne aussi.
la source
Une autre solution intéressante trouvée ici utilise ES6 Map:
UTILISATION
la source
Laissez
ts-enum-util
( github , npm ) faire le travail pour vous et fournissez de nombreux utilitaires de type sécurisé supplémentaires. Fonctionne avec les énumérations de chaîne et numériques, en ignorant correctement les entrées de recherche inversée d'index numérique pour les énumérations numériques:Énumération des chaînes:
Énumération numérique:
la source
À partir de TypeScript 2.4, l'énumération ne contiendrait plus la clé en tant que membre. source du fichier Lisez-moi TypeScript
Ma solution:
la source
Vous pouvez utiliser le
enum-values
package que j'ai écrit lorsque j'ai eu le même problème:Git: enum-values
la source
Sur la base de certaines réponses ci-dessus, j'ai trouvé cette signature de fonction de type sécurisé:
Usage:
le type de
stringVals
est'entry1' | 'entry2'
Voyez-le en action
la source
(keyof T)[]
au lieu dekeyof T
. De plus, celaexport
empêche votre terrain de jeu de fonctionner.Il semble qu'aucune des réponses ici ne fonctionnera avec des
strict
énumérations de chaînes en mode.Considérez enum comme:
Accéder à cela avec
AnimalEnum["dog"]
peut entraîner une erreur comme:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
.Solution appropriée pour ce cas, écrivez-la comme suit:
la source
keyof
avectypeof
! Une autre solution semble assez opaque, mais après tout, je pense que Typescript doit continuer à s'améliorer sur DX - Developer Experience for EnumLa meilleure façon, je pense, est de simplement déclarer les valeurs d'énumération souhaitées. De cette façon, y accéder est propre et joli (à chaque fois).
produira:
la source
Selon la documentation TypeScript, nous pouvons le faire via Enum avec des fonctions statiques.
Obtenir un nom enum avec des fonctions statiques
pour en savoir plus sur Enum avec fonction statique, suivez le lien ci-dessous https://basarat.gitbooks.io/typescript/docs/enums.html
la source
La seule solution qui fonctionne pour moi dans tous les cas (même si les valeurs sont des chaînes) est la suivante:
la source
Vieille question, mais pourquoi ne pas utiliser un
const
carte d'objets?Au lieu de faire ceci:
Faites ceci (faites attention à la
as const
distribution):la source
console.log(Object.keys(Foo))
dans le premier exemple ne revient que["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
J'ai trouvé cette question en recherchant "TypeScript itérer sur les clés enum". Je veux donc simplement publier une solution qui fonctionne pour moi dans mon cas. Peut-être que cela aidera aussi quelqu'un.
Mon cas est le suivant: je veux parcourir chaque clé enum, puis filtrer certaines clés, puis accéder à un objet qui a des clés comme valeurs calculées à partir d'énum. Voilà donc comment je le fais sans avoir d'erreur TS.
la source
J'ai écrit une classe EnumUtil qui vérifie le type par la valeur enum:
Comment l'utiliser:
Résultat pour les clés NumberValueEnum: ["A", "B"]
Résultat pour les valeurs NumberValueEnum: [0, 1]
Résultat pour StringValueEnumkeys: ["A", "B"]
Résultat pour StringValueEnumvalues: ["A", "B"]
la source
Je trouve cette solution plus élégante:
Il affiche:
la source
Mon Enum est comme ceci:
faisant ce retour non défini :
Pour résoudre ce problème, je choisis une autre façon de le faire à l'aide d'un tuyau:
Et pour l'utiliser:
la source
Si vous avez une énumération
Ensuite, vous pouvez obtenir des clés et des valeurs comme:
la source
Argument of type '(d: Diet) => void' is not assignable to parameter of type '(value: string, index: number, array: string[]) => void'. Types of parameters 'd' and 'value' are incompatible. Type 'string' is not assignable to type 'MyEnum'.(2345)
J'ai écrit une fonction d'aide pour énumérer une énumération:
Usage:
La fonction renvoie quelque chose qui peut être facilement énuméré, et convertit également le type enum.
la source
En utilisant une version actuelle de TypeScript, vous pouvez utiliser des fonctions comme celles-ci pour mapper l'énumération à un enregistrement de votre choix. Notez que vous ne pouvez pas définir de valeurs de chaîne avec ces fonctions car elles recherchent des clés avec une valeur qui est un nombre.
la source
Il y a déjà beaucoup de réponses ici, mais je pense que je vais quand même jeter ma solution sur la pile.
Aire de jeux TypeScript
Pour plus de clarté:
Référence pour enregistrement TypeScript
Une belle fonction d'aide:
la source
Pour obtenir la liste des valeurs d'énumération que vous devez utiliser:
la source
Ce n'est pas exactement la réponse à votre question, mais c'est une astuce pour résoudre votre problème.
Vous pouvez étendre votre modèle de liste comme vous le souhaitez.
Maintenant, vous pouvez l'utiliser de cette façon:
ou:
la source