让我们说,MyEnum是这种TS枚举(数字,连续):
export enum MyEnum {
optionOne,
optionTwo,
// more opions ...
}
,我想将其递增1,并将结果用作下一个方法调用的参数。这使编译器感到高兴:
private DoSomething(currentValue: MyEnum): void {
let nextEnumValue = <MyEnum>(<number><unknown>currentValue + 1);
this.DoMore(nextEnumValue);
}
private DoMore(currentValue: MyEnum): void {
// Something ...
}
是否有一种更简单(且类型安全)的方法来获取nextEnumValue
?
答案 0 :(得分:2)
我建议将此行为保留为 枚举,这样,如果对值进行了任何更改,则很明显需要对其进行更新(或至少进行复审)。例如,使用Fenton's answer here中的命名空间提示:
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
实际上是0 | 1 | 2
,是number
的子集),并且如果添加非数字值,将开始引发编译器错误枚举。但是请注意,编译器将 not 更改为非连续但仍为数值的问题,例如更改为位标记样式的值:
enum Color {
RED = 1,
GREEN = 2,
BLUE = 4
}
您必须进行其他测试才能发现类似的问题。无论哪种方式,Color.after(Color.BLUE)
都没有有意义的值。