14 lines
415 B
TypeScript
14 lines
415 B
TypeScript
export const compose = <R>(fn1: (a: R) => R, ...fns: Array<(a: R) => R>) =>
|
|
fns.reduce((prevFn, nextFn) => value => prevFn(nextFn(value)), fn1);
|
|
|
|
export const pipe = <T extends any[], R>(
|
|
fn1: (...args: T) => R,
|
|
...fns: Array<(a: R) => R>
|
|
) => {
|
|
const piped = fns.reduce(
|
|
(prevFn, nextFn) => (value: R) => nextFn(prevFn(value)),
|
|
value => value,
|
|
);
|
|
return (...args: T) => piped(fn1(...args));
|
|
};
|