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

时间:2019-02-20 21:22:08

标签: typescript

是否可以包装像这样的函数并保留类型?

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

如何从fn中提取类型并返回与传递的函数相同的输入并返回?

2 个答案:

答案 0 :(得分:4)

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

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")

答案 1 :(得分:0)

您可以使用泛型使fn返回一个函数,该函数返回与输入函数相同的类型:

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