2016-10-04 72 views
2

我試圖添加到流式打字。我從lodash/fp模塊開始,因爲這對我自己來說是最有用的。但是,我正在努力如何正確輸入。如何輸入lodash/fp咖喱菜單功能?

一個簡單的例子,如果dropRightWhile

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

這是我嘗試輸入。 dropRightWhile必須進行迭代,並且可能需要數據。如果你不給它的數據,那麼它會返回一個接收數據的函數,但如果你給它的數據,那麼它將返回一個數組。

我所做的類型並不嚴格地使參數數量和返回類型之間的連接。然而,當我嘗試使用咖喱dropRightWhile我得到一個錯誤

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

我會一直想,既然dropRightWhile可以返回一個函數,那麼我就能夠調用它,但它似乎數組類型正在阻礙。

有什麼建議嗎?

回答

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>)