Búsqueda de sitios web

angularjs - ¿Cómo asignar un Enum a una variable?


El título lo dice todo: ¿cómo asigno un Enum a una variable local como:

export enum MyEnum {
    TOP = "top",
    RIGHT = "right",
    BOTTOM = "bottom",
    LEFT = "left"
};

const myEnum: MyEnum = MyEnum; // <-Error: Type 'typeof MyEnum' is not assignable to type 'MyEnum'.

Enlace aquí.

Para que alguien se pregunte por qué haría eso: quiero iterar sobre los valores del Enum en mi plantilla de AngularJs:

// component controller
export class MyClass {
  public myEnum: MyEnum;

  constructor() {
    this.myEnum = MyEnum;
  }
}

// component template
<ul> 
  <li ng-repeat="enum in $ctrl.myEnum">{{ enum }}</li>
</ul>

EDITAR

Sé que podría asignar cada valor individual como:

constructor() {
  this.myEnum = {};
  this.myEnum.TOP = MyEnum.TOP;
  this.myEnum.RIGHT= MyEnum.RIGHT;
  this.myEnum.BOTTOM= MyEnum.BOTTOM;
  this.myEnum.LEFT= MyEnum.LEFT;
}

Pero esto no es lo que quiero. No es práctico, muy propenso a errores.

Respuesta #1

Puedes usar typeof MyEnum para referirte al tipo de todo el espacio de nombres del enum en lugar del tipo de un miembro del enum:

export class MyClass {
  public myEnum: typeof MyEnum;

  constructor() {
    this.myEnum = MyEnum;
  }
}

Pero podría ser más fácil usar un inicializador de propiedad para que TypeScript infiera el tipo y no tengas que usar una anotación de tipo en absoluto:

export class MyClass {
  public myEnum = MyEnum;
}

Artículos relacionados