我试图添加流式打字。我从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
可以返回一个函数,那么我就可以调用它,但似乎数组类型正在阻碍。
有什么建议吗?
答案 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>)