代码之家  ›  专栏  ›  技术社区  ›  ThomasReggi

包装函数并保留输入和返回类型?

  •  0
  • ThomasReggi  · 技术社区  · 5 年前

    const example = (alpha: string): string => alpha + 'beta';
    const wrappedFn = (fn: Function) => fn;
    

    我怎样才能把这些类型的 fn 并返回与传入函数相同的输入和返回?

    1 回复  |  直到 5 年前
        1
  •  4
  •   Titian Cernicova-Dragomir    5 年前

    使用rest参数中的元组,可以保留所有输入参数类型(即使有更多的参数):

    const example = (alpha: string): string => alpha + 'beta';
    const wrappedFn = <A extends any[], R>(fn: (...args: A) => R) => (...args: A): R => {
        console.log("executing");
        return fn(...args);   
    };
    
    wrappedFn(example)("a")
    
        2
  •  0
  •   Peter Olson    5 年前

    你可以使用泛型 fn 返回返回与输入函数相同类型的函数:

    const wrappedFn = <T>(fn: (T) => T) => fn;