返回回调的 ReturnType 的打字稿函数

und*_*ror 1 typescript typescript-generics

如何注释一个接受回调的函数,并从回调返回类型推断出此类函数的返回类型?

// say that callback takes a number
function takesCallback(cb: (arg:number) => infer T /* error */ ) {
  return cb(42)
}

takesCallback(x => 'foo') // should infer 'string' 
Run Code Online (Sandbox Code Playgroud)

Dan*_*eza 5

这里可以使用helper ReturnType,也需要重写通用结构,以便将其约束为函数

function takesCallback<T extends (...args: unknown[]) => unknown>(callback: T): ReturnType<T> {
  return callback(42) as ReturnType<T>;
}

const res1 = takesCallback(x => 'foo'); // string
const res2 = takesCallback(x => 123);   // number
Run Code Online (Sandbox Code Playgroud)

操场