我想写一个如下的递归函数
function withChildren<
T extends {
id?: string;
parentId?: string;
},
TWithChild extends T & {
children: TWithChild[];
}
>(parentItem: T, items: T[]): TWithChild {
const children = items.filter((ba) => ba.parentId === parentItem.id);
return {
...parentItem,
children: children.map((child) => withChildren(child, items)),
};
}
但typescript抛出错误
键入'T {子项(& C):(T扩展了“有访问权限的业务区”?“有儿童和访问权限的业务区”:有子女的业务区域)[];}"无法分配给类型“T”扩展“具有访问权限的业务区域”?“具有儿童访问权限的业务区域:有子女的业务领域
我已经查找了这个错误,但仍然没有找到任何解决办法
1条答案
按热度按时间x6492ojm1#
TWithChild
extendsT & ...
,意思是如果用作显式类型参数,它可以合并,例如{a: 1}
,您不知道它的确切类型,因此无法示例化它。将其定义为已知的受限泛型类型,这样它就可以工作了
Playground