【问题标题】:Reverse an enum in typescript [duplicate]反转打字稿中的枚举[重复]
【发布时间】:2021-08-09 22:36:02
【问题描述】:

我有下一个代码:

enum MyEnum {
  Colors = 'AreColors',
  Cars = 'AreCars',
}

const menuTitle = ((obj: MyEnum) => {
  const newObj = {};
  Object.keys(obj).forEach((x) => {
    newObj[obj[x]] = x;
  });
  return newObj;
});

在这里,我想更改枚举键来代替枚举值。
这样做我得到Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}' 这里newObj[obj[x]] = x;
为什么会出现问题以及如何解决?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    你的代码有几个问题:

    1. 如果你想通过传入MyEnum作为对象来反转枚举的键值对,那么你需要使用obj: typeof MyEnum。这是假设您想使用menuTitle(MyEnum) 来执行反转。
    2. Object.keys(obj) 将返回一个字符串数组,这会导致您的枚举出现索引问题。如果您将其转换为 keyof typeof MyEnum 的数组,那么它将起作用。

    改进的代码:

    enum MyEnum {
      Colors = 'AreColors',
      Cars = 'AreCars',
    }
    
    const menuTitle = ((obj: typeof MyEnum) => {
      const newObj: { [key in MyEnum]?: keyof typeof MyEnum } = {};
      (Object.keys(obj) as Array<keyof typeof MyEnum>).forEach((x) => {
        newObj[obj[x]] = x;
      });
      return newObj;
    });
    
    console.log(menuTitle(MyEnum));
    

    请参阅TypeScript Playground 上的概念验证示例。

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2020-04-30
      • 2019-03-04
      • 2020-01-29
      • 2017-03-06
      • 2017-05-09
      • 1970-01-01
      • 2017-06-08
      • 2020-10-27
      相关资源
      最近更新 更多