Acabo de declarar una interfaz y uso una variable de ese tipo para acceder a la enumeración. Mantener la interfaz y la enumeración sincronizadas es realmente fácil, ya que TypeScript se queja si algo cambia en la enumeración, así.
error TS2345: El argumento del tipo 'typeof EAbFlagEnum' no se puede asignar al parámetro del tipo 'IAbFlagEnum'. Falta la propiedad 'Move' en el tipo 'typeof EAbFlagEnum'.
La ventaja de este método es que no se requiere conversión de tipos para usar la enumeración (interfaz) en diversas situaciones, y por lo tanto, se admiten más tipos de situaciones, como el interruptor / caso.
// 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;
El uso de la variable, en lugar de la enumeración, produce los resultados deseados.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Las banderas eran otra necesidad para mí, así que creé un módulo NPM que se suma a este ejemplo e incluye pruebas.
https://github.com/djabraham/ts-enum-tools