Angular 可观察到的 reduce 函数错误 "Type 'true' is not assignable to type 'false'."
Angular Observable reduce function error "Type 'true' is not assignable to type 'false'."
我有一个代码,其中 memberships$
是具有 属性“角色”的对象的可观察对象。我想使用 reduce
函数来遍历所有这些,如果有人的角色是“收集者”,我想 return 值 true
。这是代码:
hasCollectorRole$: Observable<boolean> = this.memberships$.pipe(
map(arr => {
return arr.reduce((acc, val) => {
if (val.role == "Collector") {
acc = true;
}
return acc;
}, false)
})
);
这是我遇到的错误:
Type 'true' is not assignable to type 'false'.
我该如何解决这个问题?
尝试 specifying the reducer's default value's type 通过:
arr.reduce(..., false as boolean)
现在,看起来 TS 认为应该返回的类型是 false
,而不是 boolean
,并且 true
不能分配给类型 false
。
如果你想遍历一个列表并查看是否有任何角色等于 "Collector"
,你可能应该使用 .some()
而不是 .reduce()
hasCollectorRole$: Observable<boolean> = this.memberships$.pipe(
map(arr => {
return arr.some((val) => val.role === "Collector")
})
);
const testCollector = ['test', 'Collector'];
const testNoCollector = ['test', 'NotCollector'];
console.log('result with Collector', testCollector.some(t => t === 'Collector'));
console.log('result Without Collector', testNoCollector.some(t => t === 'Collector'));
我有一个代码,其中 memberships$
是具有 属性“角色”的对象的可观察对象。我想使用 reduce
函数来遍历所有这些,如果有人的角色是“收集者”,我想 return 值 true
。这是代码:
hasCollectorRole$: Observable<boolean> = this.memberships$.pipe(
map(arr => {
return arr.reduce((acc, val) => {
if (val.role == "Collector") {
acc = true;
}
return acc;
}, false)
})
);
这是我遇到的错误:
Type 'true' is not assignable to type 'false'.
我该如何解决这个问题?
尝试 specifying the reducer's default value's type 通过:
arr.reduce(..., false as boolean)
现在,看起来 TS 认为应该返回的类型是 false
,而不是 boolean
,并且 true
不能分配给类型 false
。
如果你想遍历一个列表并查看是否有任何角色等于 "Collector"
.some()
而不是 .reduce()
hasCollectorRole$: Observable<boolean> = this.memberships$.pipe(
map(arr => {
return arr.some((val) => val.role === "Collector")
})
);
const testCollector = ['test', 'Collector'];
const testNoCollector = ['test', 'NotCollector'];
console.log('result with Collector', testCollector.some(t => t === 'Collector'));
console.log('result Without Collector', testNoCollector.some(t => t === 'Collector'));