如何使用泛型作为枚举的键

问题描述

我正在尝试创建一种用于设置Web组件属性的通用方法。我决定将所有ObservedAttributes的Web组件放置在枚举中,然后使用该枚举的键设置Web组件属性,但是我不知道如何为{键将为Object,值将为enums keys

假设我有这个枚举:

string

通过此枚举,我需要这种类型:

TextFieldobservedAttributes {
    PLACEHOLDER = 'placeholder',LABEL = 'label',SIZE = 'size'
}

那行得通,但是我不知道如何使用泛型来实现这一目标。我尝试过这样的事情:

type EnumKeyStringValue = Record<'PLACEHOLDER' | 'LABEL' | 'SIZE',string>;
const example: EnumKeyStringValue = {
  PLACEHOLDER: 'text',LABEL: 'text',SIZE: 'test'
}

但是由于这些错误,这是行不通的:

声明为“ T”,但永远不会读取其值。

'T'仅指类型,但在此处被用作值。

如何定义此类通用类型?

解决方法

在评论部分使用@Aluan Haddad的建议,我提出了以下解决方案:

type EnumKeysNames<T extends string> = Partial<Record<T,string>>;

然后我可以像这样使用这种类型:

function test(props: EnumKeysNames<SomeEnum>): void {
  //...
}