可以使用泛型来定义一个函数类型 key,并为其指定入参和返回值类型。
例如,可以定义一个函数类型 key,接收一个参数为函数类型 T,其入参类型为 T 的参数类型,返回值类型为 T 的返回值类型:
interface FunctionKey<T extends (...args: any[]) => any> {
(func: T): { args: Parameters<T>, result: ReturnType<T> }
}
使用该函数类型 key,可以传入任何类型为函数的参数,返回一个对象,包含该函数的入参和返回值类型信息。例如:
const myFunc = (a: number, b: number): number => a + b;
const myFuncKey: FunctionKey<typeof myFunc> = (func) => {
return {
args: [1, 2],
result: func(1, 2)
}
};
const result = myFuncKey(myFunc);
console.log(result.args); // [1, 2]
console.log(result.result); // 3