首页 > 解决方案 > 如何使下面的代码成为正确的类型,期望自动推断出函数的返回值类型

问题描述

这里, res 预计是 a number,但实际上推断为any

function f<T>(f: (v: Partial<T>) => any): ReturnType<typeof f> {
  return f({})
}

const res = f<number>((v) => 0) // any

如果我也将该函数视为泛型,我不能只指定T

function f<T, F extends (v: Partial<T>) => any>(f: F): ReturnType<F> {
  return f({})
}

const res = f<number>((v) => 0) // TS2558: Expected 2 type arguments, but got 1.

标签: typescript

解决方案


您不需要在第二个示例中传递<number>给:f

function f<T, F extends (v: Partial<T>) => any>(f: F): ReturnType<F> {
    return f({})
}
  
const res = f((v) => 0) // res:number

const res2 = f((p:{x?:string}) => p.x) // res2:string

推荐阅读