将数字转换为枚举

9 typescript

enum SomeEnum {
  a = 10
  b = 20
}

const n: number = 20;

const enumValue: SomeEnum = ???;

Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以转换nenumValue,而不必为每个枚举类型编写 switch-case。

cap*_*ian 7

是的,有一个办法:

enum SomeEnum {
  a = 10,
  b = 20
}

const n: number = 20;

const enumValue: SomeEnum = 20; // ok

const enumValue: SomeEnum = 21; // ok, please keep in mind it is unsafe

Run Code Online (Sandbox Code Playgroud)

我鼓励你不要这样做。


就像 @Beraliv 在他们的评论中提到的那样,由于 TS 5.0 All enums Are Union enums,如果您想分配无效的数字,则会出现错误:

const enumValue: SomeEnum = 21;
Run Code Online (Sandbox Code Playgroud)

如果你无法切换到最新版本的 TypeScript,你可以查看我关于更安全枚举的文章和我的答案

  • 您还可以通过两次枚举类型索引来验证该数字:`const enumValue: SomeEnum | 未定义 = SomeEnum[SomeEnum[n] as keyof typeof SomeEnum]` (4认同)