为什么.filter谓词返回布尔值而不是任何?

时间:2018-05-18 14:13:37

标签: angular rxjs

所以我有以下代码

let someValue = Observable.of([{'id': 1}, {'id': 2}, {'id': 3}, undefined, undefined]);

所以现在,如果我想过滤未定义的值,我要么

someValue.filter(val => !!val) OR
someValue.filter(val => val !== undefined)
在TS中,.filter方法返回typeof Any,因此过滤方法可以像

一样工作
let someValue = [{'id': 1}, {'id': 2}, {'id': 3}, undefined, undefined];
someValue.filter(val => val)

这将过滤任何未定义的对象,所以我想知道为什么RxJS谓词中的.filter是boolean而不是任何?

1 个答案:

答案 0 :(得分:0)

RxJS可能在filter()的定义中严格打字。

  
      
  • @param {function(value:T,index:number): boolean }谓词A   函数*评估源发出的每个值   观察到。如果它返回true,*会发出值,如果false   该值不会传递给输出* Observable。 index   参数是第i个源*发射的数量i   自订阅以来发生,从数字* 0
  • 开始   

你仍然可以做到

someValue.filter(Boolean)

将过滤掉 falsy 值,其效果与

相同
someValue.filter(x => x)