Ich deklariere nur eine Schnittstelle und verwende eine Variable dieses Typs, um auf die Aufzählung zuzugreifen. Das Synchronisieren der Benutzeroberfläche und der Aufzählung ist eigentlich einfach, da sich TypeScript beschwert, wenn sich etwas in der Aufzählung ändert.
Fehler TS2345: Das Argument vom Typ 'typeof EAbFlagEnum' kann nicht dem Parameter vom Typ 'IAbFlagEnum' zugewiesen werden. Die Eigenschaft 'Verschieben' fehlt im Typ 'Typ von EAbFlagEnum'.
Der Vorteil dieser Methode besteht darin, dass kein Typ Casting erforderlich ist, um die Aufzählung (Schnittstelle) in verschiedenen Situationen zu verwenden, und daher werden mehr Arten von Situationen unterstützt, wie z. B. der Schalter / Fall.
// 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;
Die Verwendung der Variablen anstelle der Aufzählung führt zu den gewünschten Ergebnissen.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Flags waren eine weitere Notwendigkeit für mich, daher habe ich ein NPM-Modul erstellt, das dieses Beispiel ergänzt und Tests enthält.
https://github.com/djabraham/ts-enum-tools