我想从可观察的项目中提取项目并通过foreach
对其进行转换,然后将结果保存到新变量中。
我不确定为什么此代码不起作用:
policYears$: Observable<PolicyYear[]>;
policYearsSelector$: Observable<YearSelector.PolicyYear[]>;
this.policYearsSelector$ = this.policYears$.pipe(
map((year: YearSelector.PolicyYear[]) => year.forEach(y => y.isActive = this.params.policyYearIds.indexOf(y.id) !== -1))
);
我遇到错误:Type 'Observable<void>' is not assignable to type 'Observable<PolicyYear[]>'.
Type 'void' is not assignable to type 'PolicyYear[]'.
为什么返回void?
答案 0 :(得分:1)
array.forEach
不返回值,因为它只是用于迭代。因此,year.forEach
不会向map
返回任何内容,然后void
也不返回任何内容。
您需要使用year.map
并返回一个值
答案 1 :(得分:0)
您正在映射policeYears$
中的数据,且类型为“ PolicyYears []”
所以您必须将代码更改为
policYears$: Observable<PolicyYear[]>;
policYearsSelector$: Observable<YearSelector.PolicyYear[]>;
this.policYearsSelector$ = this.policYears$.pipe(
map(
(year: PolicyYear[]): YearSelector.PolicyYear[] =>
year.forEach(
y => y.isActive = this.params.policyYearIds.indexOf(y.id) !== -1
)
)
);
year的类型为PolicyYear [],并且地图返回YearSelector.PolicyYear []
热烈的问候
答案 2 :(得分:0)
问题是Array.forEach
返回void
(因此,您收到的错误消息是因为您现在尝试使用map
将PolicyYear[]
映射到{{ 1}})。
现在,根据您要执行的操作,您可以继续使用void
并只返回更新后的数组:
forEach
或者您可以使用map((year: YearSelector.PolicyYear[]) => {
year.forEach(y => y.isActive = this.params.policyYearIds.indexOf(y.id) !== -1);
return year;
})
并返回一个新数组:
Array.map