Javascript groupBy是类型脚本安全的
给出了所有已经给出的答案,我们试图创建一个Javascript groupBy是类型脚本安全的,javascript,arrays,typescript,Javascript,Arrays,Typescript,给出了所有已经给出的答案,我们试图创建一个groupByarrow函数,它不会抱怨打字脚本错误。在我们的指导下,我们已经有了以下工作代码: const groupBy=( 项目:滴度[], 关键字:字符串 ):{[key:string]:TItem[]}=> 减少( (结果,项目)=>({ …结果, [项目[键]:[…(结果[项目[键]]| |[]),项目], }), {} ) 然而,它仍然抱怨: 确实可能使用的键为空/空白。所以这里的TypeScript没有错。所以在这种情况下,它应该简单
groupBy
arrow函数,它不会抱怨打字脚本错误。在我们的指导下,我们已经有了以下工作代码:
const groupBy=(
项目:滴度[],
关键字:字符串
):{[key:string]:TItem[]}=>
减少(
(结果,项目)=>({
…结果,
[项目[键]:[…(结果[项目[键]]| |[]),项目],
}),
{}
)
然而,它仍然抱怨:
确实可能使用的键
为空/空白。所以这里的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[]>
);
type ObjectKey=string | number | symbol;
常量groupBy=(
项目:滴度[],
关键字:K
):记录=>
减少(
(结果,项目)=>({
…结果,
[项目[键]:[…(结果[项目[键]]| |[]),项目],
}),
{}作为记录
);
非常感谢!我自己也弄不明白。只要
ObjectKey
不为空,就可以很好地工作,但这很容易修复。