繁体   English   中英

如何基于枚举为 .reduce 创建初始值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM