[英]How to create initial value for .reduce based on enum?
我有一个简化的函数,它需要基于枚举的初始值。 请参阅下面的简化代码:
items.reduce<Record<RoleType, Community[]>>(
(acc, community) => {
... // this works
},
{ [RoleType.LEADER]: [], [RoleType.FACILITATOR]: [], [RoleType.EDITOR]: [], [RoleType.EXPERT]: [], [RoleType.MEMBER]: [] }
);
枚举看起来像这样:
export enum RoleType {
EXPERT = 'EXPERT',
LEADER = 'LEADER',
FACILITATOR = 'FACILITATOR',
EDITOR = 'EDITOR',
MEMBER = 'MEMBER'
}
不过,我不想明确列出枚举的每个成员。 我尝试了以下内容:
{ ...Object.values(RoleType).map((role) => ({ [role]: [] })) }
有没有办法简单地为枚举的所有成员添加空数组? 最好的情况是如果也有正确的打字。
我上面的尝试抛出了这个错误(我真的不知道该怎么办):
输入 '{ [n: number]: { [x: string]: any[]; }; 长度:数量; toString(): 字符串; toLocaleString(): 字符串; pop(): { [x: string]: any[]; }; push(...items: { [x: string]: any[]; }[]): number; concat(...items: ConcatArray<{ [x: string]: any[]; }>[]): { ...; }[]; concat(...items: ({ ...; } | ConcatArray<...>)[]): { ...; }[];...' 缺少类型 'Record<RoleType, Community[]>' 中的以下属性:EXPERT、LEADER、FACILITATOR、EDITOR、MEMBER
{ ...Object.values(RoleType).map((role) => ({ [role]: [] })) }
将创建一个以数组索引为键的对象。
{
"0": { "EXPERT": [] },
"1": { "LEADER": [] },
"2": { "FACILITATOR": [] }
...
}
你需要使用这样的东西:
Object.assign({}, ...Object.values(RoleType).map(r => ({ [r]: [] })))
我制作了一个 TS 转换器,它允许您获取枚举的所有值,它被称为ts-reflection ,它的工作原理是这样的:
enum MyEnum {
NO = 0,
MAYBE = 1,
YES = 2
}
const valuesOfMyEnum = valuesOf<MyEnum>(); // [0, 1, 2]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.