Redux源码阅读_2

compose.ts

从右到左来组合多个函数,是reduce函数的一个应用实现。

首先仍然是重载了多个参数的函数声明,区别主要是传入参数个数。

export default function compose(f: F): F

/* two functions */
export default function compose(
  f1: (a: A) => R,
  f2: Func
): Func

/* three functions */
export default function compose(
  f1: (b: B) => R,
  f2: (a: A) => B,
  f3: Func
): Func

/* four functions */
export default function compose(
  f1: (c: C) => R,
  f2: (b: B) => C,
  f3: (a: A) => B,
  f4: Func
): Func

/* rest */
export default function compose(
  f1: (a: any) => R,
  ...funcs: Function[]
): (...args: any[]) => R

export default function compose(...funcs: Function[]): (...args: any[]) => R

然后是主要代码:

export default function compose(...funcs: Function[]) {
  if (funcs.length === 0) {
    // infer the argument type so it is usable in inference down the line
    return (arg: T) => arg
  }

  if (funcs.length === 1) {
    return funcs[0]
  }

  return funcs.reduce((a, b) => (...args: any) => a(b(...args)))
}

可以看到compose函数主要是调用了reduce方法来实现迭代。

你可能感兴趣的:(Redux源码阅读_2)