typescript 类型脚本中的 predicate 和回调函数有什么区别?

lb3vh1jj  于 2023-04-22  发布在  TypeScript
关注(0)|答案(2)|浏览(165)

这是我正在学习的代码。

let depList : Array<number>;
depList = [1,2,3,4,5,6,7,8,9];

let numResults = depList.filter(num => num > 5); // predicate
console.log(numResults);

let resultFind = depList.find(num => num ==5); // predicate
console.log(resultFind);

let sum = depList.reduce((acc, num) => acc + num); // callback function
console.log(sum);

这里 predicate 和回调函数有什么区别?
我试着通过方法定义,但似乎很难理解的差异。

qyyhg6bp

qyyhg6bp1#

有很大的重叠。
“ predicate ”是一个接受参数并返回布尔值的函数。它总是一个布尔值,因为它总是与一些逻辑检查相关。示例

const isEmpty = x => x.length === 0;
const isOdd   = n => n % 2 === 1;
const isEven  = n => n % 2 === 0;

“回调”是任何作为参数传入的函数。它可能是一个 predicate (返回布尔值),也可能不是。
.filter().find()的情况下,它们接受的 callbackpredicate
一个 predicate 不一定要用作回调函数,回调函数也不一定是一个 predicate ,两者是正交的。

lsmepo6l

lsmepo6l2#

如上所述, predicate 是一个接受单个参数并返回布尔值的函数。回调是一个传递给另一个函数的函数。
在typescript中, predicate 非常重要,因为它们可以用于类型收缩。例如:

const myArray:Array<null | number>();
...
const filtered = myArray.filter((n):n is number => n != null)

因为 predicate 用n is number注解,所以它现在是一个类型 predicate 。这意味着filtered现在有number[]类型-类型系统知道所有的null都已经从数组中过滤掉了。

相关问题