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
值的正确方法是什么?
答案 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
一个枚举值,并且由于这是一个字符串枚举,因此它将是keyof
。 keyof string
类型可以看作是所有枚举成员的并集,因此您可以使用它:
Enume1