在 TypeScript 中,我们有时会遇到两个不同名称但具有相同值的枚举类型(enum)。例如:
ini
enum EnumA {
Red = 'Red',
Green = 'Green',
Blue = 'Blue'
}
enum EnumB {
Red = 'Red',
Green = 'Green',
Blue = 'Blue'
}
那么,该如何在 EnumA
和 EnumB
之间进行转换呢?下面介绍几种常见方法:
方法一:类型断言(Type Assertion)
这是最简单直接的方式:
ini
const a: EnumA = EnumA.Red;
const b: EnumB = a as EnumB;
只要两个枚举值完全一致,这种方式是可行的,但缺乏类型安全。
方法二:显式转换函数(推荐)
为了提高代码的可读性和安全性,推荐使用一个封装好的转换函数:
arduino
function convertEnumAtoEnumB(a: EnumA): EnumB {
switch (a) {
case EnumA.Red:
return EnumB.Red;
case EnumA.Green:
return EnumB.Green;
case EnumA.Blue:
return EnumB.Blue;
}
}
这种方式便于维护,如果将来两个枚举的值发生变化,也可以快速定位问题。
方法三:基于值的动态映射
如果枚举值是字符串或数字且完全一致,也可以通过值来映射:
ini
const a: EnumA = EnumA.Green;
const b: EnumB = EnumB[a as keyof typeof EnumB];
或者使用一个通用的转换函数:
typescript
function convertEnumValue<T extends string, U>(value: T, targetEnum: Record<T, U>): U {
return targetEnum[value];
}
const b = convertEnumValue(a, EnumB); // b 是 EnumB.Green