Как мне набрать 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
может вернуть функцию, тогда я смог бы вызвать ее, но, похоже, мешает тип массива.
Какие-либо предложения?
1 ответ
Вы можете определить 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>)