Acabei de declarar uma interface e usar uma variável desse tipo para acessar o enum. Manter a interface e a enum em sincronia é realmente fácil, pois o TypeScript reclama se algo muda na enum, assim.
erro TS2345: O argumento do tipo 'typeof EAbFlagEnum' não é atribuível ao parâmetro do tipo 'IAbFlagEnum'. A propriedade 'Move' está ausente no tipo 'typeof EAbFlagEnum'.
A vantagem desse método é que não é necessária a conversão de tipos para usar a enum (interface) em várias situações, e, portanto, há suporte para mais tipos de situações, como o 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;
Usar a variável, em vez da enumeração, produz os resultados desejados.
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
Os sinalizadores eram outra necessidade para mim, então criei um módulo NPM que adiciona a este exemplo e inclui testes.
https://github.com/djabraham/ts-enum-tools