export const enum Enum1{
key1='value1',
key2='value2',
key3='value3',
}
type ObjType = {
[Key in keyof Enum1]: {
some_object: number
}
}
export const obj1:ObjType ={
[Enum1.key1]:{some_object:123},
[Enum1.key2]:{some_object:123},
[Enum1.key3]:{some_object:123}
}
上面的代码产生一个错误:
错误:(145,3)TS2322:键入'{[Enum1.key1]:{some_object:number; }; [Enum1.key2]:{some_object:number; }; [Enum1.key3]:{some_object:number; }; }”不可分配给“ Obj”类型。
对象文字只能指定已知的属性,并且'[Enum1.key1]'在'Obj'类型中不存在。
我想定义一个类型(
ObjType
),其键是Enum1
枚举的所有值。我怎样才能做到这一点?如果不可能的话,强制
obj1
键包含所有Enum1
值的正确方法是什么? 最佳答案
你近了您不想要keyof Enum1
。 keyof Enum1
本质上是keyof
枚举值,并且由于这是一个字符串枚举,因此它将是keyof string
。 Enume1
类型可以看作是所有枚举成员的并集,因此您可以使用它:
export const enum Enum1{
key1='value1',
key2='value2',
key3='value3',
}
type ObjType = {
[Key in Enum1]: {
some_object: number
}
}
export const obj1:ObjType ={
[Enum1.key1]:{some_object:123},
[Enum1.key2]:{some_object:123},
[Enum1.key3]:{some_object:123}
}