gpt4 book ai didi

javascript - typeScript 安全的 groupBy

转载 作者:行者123 更新时间:2023-12-04 14:09:51 25 4
gpt4 key购买 nike

鉴于所有已经存在的答案,我们尝试创建一个不会提示 TypeScript 错误的 groupBy 箭头函数。在 this answer 的指导下和 this one我们已经有了这个工作代码:

const groupBy = <TItem>(
items: TItem[],
key: string
): { [key: string]: TItem[] } =>
items.reduce(
(result, item) => ({
...result,
[item[key]]: [...(result[item[key]] || []), item],
}),
{}
)

然而,它仍然提示: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'unknown'.No index signature with a parameter of type 'string' was found on type 'unknown'.

确实有可能使用的 key 是空的。所以TypeScript在这里并没有错。所以在那种情况下,它应该简单地使用占位符值,如 NA 或其他东西。

为此 groupBy 函数创建可重用的无错误 typescript 版本的正确方法是什么?

最佳答案

使用一些泛型来降低键类型并强制对象包含键:

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[]>
);

Playground link

关于javascript - typeScript 安全的 groupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65184643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com