美文网首页
Redux源码阅读_2

Redux源码阅读_2

作者: 晴窗细语 | 来源:发表于2020-08-08 15:18 被阅读0次

    compose.ts

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

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

    export default function compose<F extends Function>(f: F): F
    
    /* two functions */
    export default function compose<A, T extends any[], R>(
      f1: (a: A) => R,
      f2: Func<T, A>
    ): Func<T, R>
    
    /* three functions */
    export default function compose<A, B, T extends any[], R>(
      f1: (b: B) => R,
      f2: (a: A) => B,
      f3: Func<T, A>
    ): Func<T, R>
    
    /* four functions */
    export default function compose<A, B, C, T extends any[], R>(
      f1: (c: C) => R,
      f2: (b: B) => C,
      f3: (a: A) => B,
      f4: Func<T, A>
    ): Func<T, R>
    
    /* rest */
    export default function compose<R>(
      f1: (a: any) => R,
      ...funcs: Function[]
    ): (...args: any[]) => R
    
    export default function compose<R>(...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 <T>(arg: T) => arg
      }
    
      if (funcs.length === 1) {
        return funcs[0]
      }
    
      return funcs.reduce((a, b) => (...args: any) => a(b(...args)))
    }
    

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

    相关文章

      网友评论

          本文标题:Redux源码阅读_2

          本文链接:https://www.haomeiwen.com/subject/tlzfdktx.html