typescript - 如何在 Typescript 中增加枚举?
问题描述
假设 MyEnum 是这种类型的 TS 枚举(数字,连续):
export enum MyEnum {
optionOne,
optionTwo,
// more opions ...
}
我想将它加一并将结果用作下一个方法调用的参数。这使编译器高兴:
private DoSomething(currentValue: MyEnum): void {
let nextEnumValue = <MyEnum>(<number><unknown>currentValue + 1);
this.DoMore(nextEnumValue);
}
private DoMore(currentValue: MyEnum): void {
// Something ...
}
是否有更简单(且类型更安全)的获取方式nextEnumValue
?
解决方案
我建议将此行为保留在枚举中,以便在对值进行任何更改时更明显地需要更新(或至少审查)它。例如,在这里使用 Fenton 的回答中的命名空间理念:
enum Color {
RED,
GREEN,
BLUE
}
namespace Color {
export function after(value: Color): Color {
return value + 1;
}
}
// In use
const color: Color = Color.after(Color.RED);
这不需要任何类型断言(因为Color
is 实际上0 | 1 | 2
是 的子集number
),并且如果您向枚举添加非数字值,则会开始引发编译器错误。但是请注意,编译器在更改非连续但仍然是数值时不会出现问题,例如更改为位标志样式值:
enum Color {
RED = 1,
GREEN = 2,
BLUE = 4
}
您必须进行其他测试才能发现此类问题。它也没有处理这样一个事实,无论哪种方式,Color.after(Color.BLUE)
都没有有意义的价值。
推荐阅读
- javascript - 使用 Discord.js 在 mongoDB 集群中不删除的数组
- menu - 如何以编程方式在 InDesign 中部署菜单?
- flutter - Flutter 中的应用级别或全局 Steam 监听
- php - 使用关系覆盖 Create 和 CreateMany From Trait
- svelte - 如何根据来自页面上的 HTML 下拉框的值向 Svelte 商店添加动态值
- python - 为什么代码在本地系统上完美运行时,在线判断会出现运行时错误?
- cypress - cypress Cypress.config.baseUrl 设置正确但是从 cy.visit() 得到错误
- perl - 如何获取访问目录下文件所需的所有组?
- python - 如果多次运行同一个程序,舍入误差是随机的还是一致的
- javascript - VueJS复选框从数据属性值中获取总和和计数