如何将Enum分配给变量?

时间:2018-10-11 11:33:52

标签: angularjs typescript

标题说明了一切:如何将Enum分配给像这样的局部变量:

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'.

链接here

有人想知道为什么我会这样做: 我想遍历我的AngularJs模板中的Enum值:

// 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>

编辑

我知道我可以分配每个值,例如:

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

但这不是我想要的。不方便,很容易出错。

1 个答案:

答案 0 :(得分:3)

您可以使用typeof MyEnum来引用整个枚举名称空间的类型,而不是枚举成员的类型:

export class MyClass {
  public myEnum: typeof MyEnum;

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

但是使用属性初始化器可能会更容易,因此TypeScript可以推断类型,而您根本不必使用类型注释:

export class MyClass {
  public myEnum = MyEnum;
}