Je déclare simplement une interface et j'utilise une variable de ce type pour accéder à l'énumération. Garder l'interface et l'énumération synchronisées est en fait facile, car TypeScript se plaint si quelque chose change dans l'énumération, ainsi.
erreur TS2345: l'argument de type «typeof EAbFlagEnum» n'est pas attribuable au paramètre de type «IAbFlagEnum». La propriété «Move» est manquante dans le type «typeof EAbFlagEnum».
L'avantage de cette méthode est qu'aucune conversion de type n'est requise pour utiliser l'énumération (interface) dans diverses situations, et plusieurs types de situations sont ainsi pris en charge, tels que le commutateur / boîtier.
// Declare a TypeScript enum using unique string
// (per hack mentioned by zjc0816)
enum EAbFlagEnum {
None = <any> "none",
Select = <any> "sel",
Move = <any> "mov",
Edit = <any> "edit",
Sort = <any> "sort",
Clone = <any> "clone"
}
// Create an interface that shadows the enum
// and asserts that members are a type of any
interface IAbFlagEnum {
None: any;
Select: any;
Move: any;
Edit: any;
Sort: any;
Clone: any;
}
// Export a variable of type interface that points to the enum
export var AbFlagEnum: IAbFlagEnum = EAbFlagEnum;
L'utilisation de la variable, plutôt que de l'énumération, produit les résultats souhaités.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Les indicateurs étaient une autre nécessité pour moi, j'ai donc créé un module NPM qui s'ajoute à cet exemple et inclut des tests.
https://github.com/djabraham/ts-enum-tools