Loda sh FP Curry и TypeScript: как сохранить объявления типов после каррирования функции? - PullRequest
2 голосов
/ 19 июня 2020

Функция

const getPropsFromObject = <P extends keyof T, T extends object>
    (props: P | P[], target: T): T[P][] => flow(
        castArray,
        map(partialRight(get, [target]))
    )(target)

Эта функция отлично работает:

const data = {a: 5, b: 6}
const values = getPropsFromObject(["a", "b"], data);
// number[]

Intellisense возвращается очень четким и кратким, и я знаю, что я получу в результате .

Однако, когда я оборачиваю эту же функцию в curry:

export const getAll = curry(getPropsFromObject);

// const getAll: (...args:any[]) => any

const data = {a: 5, b: 6}
const values = getAll(["a", "b"], data);

// const values: any

Из того, что я читал в Руководстве по TypeScript, в этой ситуации обычно используются перегрузки. Однако я не могу найти пример использования перегрузок с бесточечным стилем функционального программирования / составных функций.

...