如何用枚举值的键定义对象的类型

时间:2019-02-27 11:32:38

标签: javascript typescript

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值的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您很近。您不需要var result = data .GroupBy(item => item.Key) .Select(chunk => new { Key = chunk.Key, @true = chunk.FirstOrDefault(item => item.MyFlag)?.MyString, @false = chunk.FirstOrDefault(item => !item.MyFlag)?.MyString, }); keyof Enum1本质上是keyof Enum1一个枚举值,并且由于这是一个字符串枚举,因此它将是keyofkeyof string类型可以看作是所有枚举成员的并集,因此您可以使用它:

Enume1