首页 > 解决方案 > 打字稿比较两个不同的枚举,如果值相同则返回键

问题描述

我有 2 个不同的枚举,给定 1 个枚举,我想检查该值是否存在于另一个枚举中并返回密钥。

function foo(enum2Value: enum2) {
    const enum1Key = Object.keys(enum1).find((key: any) => {
        return enum1[key] === enum2;
    });
    return enum1Key;
}

此代码有效。但我必须对任何一个施放钥匙。如果我使用字符串,则 enum1[key] === enum2 不起作用。比较两个不同的枚举的更好方法是什么

标签: typescript

解决方案


const enumValByKey = (k: string, o: object) =>
    (k in o) ? (o as Record<typeof k, string | number>)[k] : null;

enumValByKey('ABC', enum1); // value of enum1.ABC, or null

不幸的是,我的解决方案仍然需要断言。string | number据我所知,涵盖了所有 TS 枚举。

好奇是否有一种方法可以在没有断言的情况下对此进行建模。


推荐阅读