ts interface 如何定义一个函数类型 key,其入参类型和返回值类型为实际传入函数对应类型?

4 min read

可以使用泛型来定义一个函数类型 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