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 Enum1keyof Enum1本质上是keyof枚举值,并且由于这是一个字符串枚举,因此它将是keyof stringEnume1类型可以看作是所有枚举成员的并集,因此您可以使用它:

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}
}

07-24 15:06