Dichiaro solo un'interfaccia e utilizzo una variabile di quel tipo per accedere all'enum. Mantenere l'interfaccia e l'enum sincronizzati è in realtà facile, poiché TypeScript si lamenta se qualcosa cambia nell'enum, in questo modo.
errore TS2345: l'argomento di tipo 'typeof EAbFlagEnum' non è assegnabile al parametro di tipo 'IAbFlagEnum'. La proprietà 'Sposta' non è presente nel tipo 'typeof EAbFlagEnum'.
Il vantaggio di questo metodo è che non è richiesto il cast di tipo per usare l'enum (interfaccia) in varie situazioni, e quindi sono supportati più tipi di situazioni, come switch / case.
// 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'uso della variabile, anziché dell'enum, produce i risultati desiderati.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Le bandiere erano un'altra necessità per me, quindi ho creato un modulo NPM che si aggiunge a questo esempio e include test.
https://github.com/djabraham/ts-enum-tools