首页 > 解决方案 > 打字稿用枚举键迭代对象

问题描述

我想用枚举键迭代一个对象。问题是类型总是相互干扰,我宁愿不强制转换所有内容。

enum MyEnum { A, B, C }
type MyMap = { [key in MyEnum]: string };
const myMap: MyMap = {
    [MyEnum.A]: 'a?',
    [MyEnum.B]: 'b',
    [MyEnum.C]: 'c...',
};

如果我尝试Object.keysfor..in它总是显示错误。

Object.keys(myMap).forEach(key => {
    const data = myMap[key]; // <= Error TS7017: Element implicitly has an 'any' type because type 'MyMap' has no index signature.
});
// same with: for (const key in myMap) {

Object.keys(myMap).forEach((key: MyEnum) => { // Error TS2345: Argument of ... Type 'string' is not assignable to type 'MyEnum'.
});

我可以施放钥匙,但甚至不能直接施放...

Object.keys(myMap).forEach(key => {
    const data = myMap[key as MyEnum]; // Error TS2352: Conversion of type 'string' to type 'MyEnum' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.

    // have to do this but would prefer not to
    const data2 = myMap[key as unknown as MyEnum];
});

某处可能有一个解决方案,但我没有使用正确的关键字并且没有找到它:((编辑:或者可能没有)

标签: typescript

解决方案


如果您不想使用anyunknown

    const data = myMap[MyEnum[key as keyof typeof MyEnum]];

推荐阅读