Dar*_*te1 3 javascript arrays typescript
考虑到所有已经存在的答案,我们尝试创建一个groupBy不会抱怨 TypeScript 错误的箭头函数。在这个答案和这个答案的指导下,我们已经有了这个工作代码:
const groupBy = <TItem>(
items: TItem[],
key: string
): { [key: string]: TItem[] } =>
items.reduce(
(result, item) => ({
...result,
[item[key]]: [...(result[item[key]] || []), item],
}),
{}
)
Run Code Online (Sandbox Code Playgroud)
使用的确实有可能key是空的/空白的。所以TypeScript在这里并没有错。因此,在这种情况下,它应该简单地使用占位符值之类的NA东西。
为此函数创建可重用的无错误打字稿版本的正确方法是什么groupBy?
使用一些泛型来降低键类型并强制对象包含键:
type ObjectKey = string | number | symbol;
const groupBy = <K extends ObjectKey, TItem extends Record<K, ObjectKey>>(
items: TItem[],
key: K
): Record<ObjectKey, TItem[]> =>
items.reduce(
(result, item) => ({
...result,
[item[key]]: [...(result[item[key]] || []), item],
}),
{} as Record<ObjectKey, TItem[]>
);
Run Code Online (Sandbox Code Playgroud)