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'));