在我们查阅 Ramda 的文档 时, 常会见到一些"奇怪"的类型签名和用法,例如:
(Applicative f, Traversable t) => (a → f a) → t (f a) → f (...function add(a: number, b: number): number;
export function add(a: number): (b: number) => number;
OK, 那为什么...举个例子:
type T = F;
报错信息如下:
Type 'F' is not generic....正如示例中type T = F;中, 我们无法告诉TypeScript, 这里的F是一个类型构造器, 所以当将number传入F的时候, 就报错了....ff => fa.then(ff));
ap 或说 Apply 作为函数式编程中的一种常见抽象, 有非常重要重要的学习意义, 但其抽象的解析超出本文范围, 在这里我们只聚焦于「是什么」, 暂不考虑「为什么