将枚举分配为对象类型的键的值

Assign an enum as the value of the key of an object type

下面是我的枚举:

export enum MyEnum {
  Enum1 = 'Enum 1',
  Enum2 = 'Enum 2',
  Enum3 = 'Enum 3',
  Enum4 = 'Enum 4',
  Enum5 = 'Enum 5',
}

我想为下面显示的示例对象创建一个类型:

const testData = {
  test1: {
    Enum1: 'Enum 1',
    Enum2: 'Enum 2',
  },
  test2: {
    Enum1: 'Enum 1',
    Enum2: 'Enum 2',
    Enum3: 'Enum 3',
    Enum4: 'Enum 4',
  },
  test2: {
    Enum1: 'Enum 1',
    Enum2: 'Enum 2',
    Enum4: 'Enum 4',
  },
};

到目前为止,我可以想出:

type FilteredBuyableMethods = {
  [key: string]: Partial<{
    [key in MyEnum]: string
  }>
};

如何用密钥的确切值替换 [key in MyEnum]: string 中的 string

所以,如果键是 Enum1,它的值应该只是 'Enum 1' 等等。

此外,附加到 testData 中可用的键(例如 test1test2)的值(具有枚举键和值的对象)应该是枚举 MyEnum。不一定来自枚举 MyEnum 的所有值都应该存在(部分),但除了枚举键值对之外,不应添加任何随机键值对。感谢期待。

使用 and 中的技巧,您可以构造一个映射类型,如下所示:

type FilteredBuyableMethods = {
  [key: string]: Partial<{
    [key in keyof typeof MyEnum]: `${typeof MyEnum[key]}`
  }>
};

注意 typeof MyEnum[key] 解析为 (typeof MyEnum)[key]
(online playground)

这将防止错误的键(不是枚举的键)和错误的值(分别不适合它们的键)。