如何输入lodash / fp curried函数?

时间:2016-10-04 15:58:31

标签: lodash flowtype

我试图添加流式打字。我从lodash/fp模块开始,因为这对我自己最有用。但是,我正在努力解决如何正确输入它的问题。

dropRightWhile

的简单示例
declare function dropRightWhile<T>(iteratee: (val: T)=>boolean, data?: Array<T>): Array<T> | (data: Array<T>)=>Array<T>;

这是我尝试输入它。 dropRightWhile必须使用iteratee,它可以获取数据。如果你没有给它数据,那么它会返回一个获取数据的函数,但如果你给它数据,那么它会返回一个数组。

我所做的类型并没有严格地在参数个数和返回类型之间建立连接。但是,当我尝试使用curried dropRightWhile时,我收到错误

var c = dropRightWhile((x) => x> 0); c([0, 1, 2, 3]); error: Function cannot be called on array type

我会认为既然dropRightWhile可以返回一个函数,那么我就可以调用它,但似乎数组类型正在阻碍。

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

您可以定义2次过载

declare function dropRightWhile<T>(iteratee: (val : T) => boolean, data : Array<T>) : Array<T>;
declare function dropRightWhile<T>(iteratee: (val : T) => boolean): (data : Array<T>) => Array<T>;

// tests
const iteratee = x => x > 0;
(dropRightWhile(iteratee)([0, 1, 2, 3]) : Array<number>);
(dropRightWhile(iteratee, [0, 1, 2, 3]) : Array<number>)