2016-10-04 4 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を使用しようとするしかし、私はdropRightWhile関数を返すことができるので、私はそれを呼び出すことができるだろうと思っただろうが、それは思わエラー

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

を取得します配列の型が途中で取り残されています。

提案がありますか?

答えて

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>) 
を定義することができます
関連する問題