You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何从单个枚举值获取所有枚举值?

问题解答

没办法直接从枚举值反向推断出它所属的枚举类型——因为TypeScript枚举编译后在运行时就是普通对象,枚举值本质就是字符串或数字,本身不携带任何所属枚举的元信息,而且不同枚举完全可能包含相同的成员值。

不过可以通过以下两种替代方案实现类似需求:

方案一:提前维护枚举集合,遍历匹配

把所有可能的枚举统一存到一个映射对象里,然后遍历查找包含目标值的枚举:

// 定义示例枚举
enum MyNumber {
    ONE='ONE',
    TWO='TWO',
    THREE='THREE',
    FOUR='FOUR',
    FIVE='FIVE',
}

enum MyColor {
    RED='RED',
    GREEN='GREEN',
    BLUE='BLUE',
}

// 维护所有需要检测的枚举
const allEnums = {
    MyNumber,
    MyColor
};

// 根据枚举值查找所属枚举
function findEnumByValue(value: string | number) {
    for (const enumObj of Object.values(allEnums)) {
        if (Object.values(enumObj).includes(value)) {
            return enumObj;
        }
    }
    return null;
}

// 使用示例
const myVar = MyNumber.ONE;
const targetEnum = findEnumByValue(myVar);
if (targetEnum) {
    console.log(Object.values(targetEnum)); // 输出 ["ONE", "TWO", "THREE", "FOUR", "FIVE"]
}

注意:如果多个枚举存在相同的成员值,这个方法会返回第一个匹配到的枚举,需要根据业务场景处理冲突情况。

方案二:自定义枚举结构,附加元信息

修改枚举的定义形式,给每个枚举值附加所属枚举的标识,让值本身携带归属信息:

// 定义带元信息的枚举成员类型
interface TypedEnumMember {
    value: string;
    enumKey: string;
}

// 自定义枚举结构
const MyNumber = {
    ONE: { value: 'ONE', enumKey: 'MyNumber' } as TypedEnumMember,
    TWO: { value: 'TWO', enumKey: 'MyNumber' } as TypedEnumMember,
    THREE: { value: 'THREE', enumKey: 'MyNumber' } as TypedEnumMember,
    FOUR: { value: 'FOUR', enumKey: 'MyNumber' } as TypedEnumMember,
    FIVE: { value: 'FIVE', enumKey: 'MyNumber' } as TypedEnumMember,
};

const MyColor = {
    RED: { value: 'RED', enumKey: 'MyColor' } as TypedEnumMember,
    GREEN: { value: 'GREEN', enumKey: 'MyColor' } as TypedEnumMember,
    BLUE: { value: 'BLUE', enumKey: 'MyColor' } as TypedEnumMember,
};

// 维护枚举映射
const enumMap = {
    MyNumber,
    MyColor
};

// 使用示例
const myVar = MyNumber.ONE;
const targetEnum = enumMap[myVar.enumKey];
// 提取枚举值列表
const enumValues = Object.values(targetEnum).map(item => item.value);
console.log(enumValues); // 输出 ["ONE", "TWO", "THREE", "FOUR", "FIVE"]

这种方式需要调整枚举的定义逻辑,但能准确关联枚举值和所属枚举,避免冲突问题。


内容的提问来源于stack exchange,提问作者s-hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:48:35