Как мне набрать 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>)
Другие вопросы по тегам