问题描述
我正在尝试创建一种用于设置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 {
//...
}