我有以下类型
type ParentKeys = "mum" | "dad";
type ChildKeys = "alice" | "frank";
type Parents = {
[parentKey in ParentKeys]: {
children: {
[childKey in ChildKeys]: {
parent: parentKey;
key: childKey;
};
}[ChildKeys][];
};
};
也就是说,内部child
对象{ parent, key }
被安装在树结构内,在它们各自的父对象之下;允许所有parent-child
配对。有关示例,请检查
const parents: Parents = {
mum: {
children: [
{ parent: "mum", key: "alice", },
],
},
dad: {
children: [
{ parent: "dad", key: "frank", },
{ parent: "dad", key: "alice", },
],
},
};
现在,如果我在Angular 模板中使用parents
<div *ngFor="let parent of parents | keyvalue">
<div *ngFor="let child of parent.value.children">
<div>child {{child.key}} of parent {{child.parent}}</div>
</div>
</div>
我得到了错误
Type
'(
{ parent: "mum"; key: "alice"; } |
{ parent: "mum"; key: "frank"; }
)[] |
(
{ parent: "dad"; key: "alice"; } |
{ parent: "dad"; key: "frank"; }
)[]'
is not assignable to type
'(
(
{ parent: "mum"; key: "alice"; } |
{ parent: "mum"; key: "frank"; }
)[] &
NgIterable<
{ parent: "mum"; key: "alice"; } |
{ parent: "mum"; key: "frank"; }
>
) | null | undefined'
.ngtsc(2322)
当然,这可以使用$any()
来解决,但很明显,我的类型或KeyValuePipe
出了问题。
2条答案
按热度按时间5q4ezhmt1#
只需像这样更改它
oxcyiej72#
该问题与父母的打字操作有关,应采取以下措施:
这个问题是children对象类型化过程中的一个过度复杂的问题。
问题在于
keyvalue
管道与*ngFor
的交互。下面的
html
可以工作:主要的区别是我们调用
parents[parent.key]
而不是parent.value
,这样做意味着我们获得了存储在原始对象中的值,这是因为keyvalue
与*ngFor
组合在一起修改了对象,导致它失去了可迭代性并引发错误。