Функция
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, в этой ситуации обычно используются перегрузки. Однако я не могу найти пример использования перегрузок с бесточечным стилем функционального программирования / составных функций.