Typescript 如何使下面的代码具有正确的类型,以期望自动推断函数的返回值类型
在这里,res应该是一个Typescript 如何使下面的代码具有正确的类型,以期望自动推断函数的返回值类型,typescript,Typescript,在这里,res应该是一个数字,但实际上它被推断为any function f<T>(f: (v: Partial<T>) => any): ReturnType<typeof f> { return f({}) } const res = f<number>((v) => 0) // any 在第二个示例中,您不需要将传递到f: function f<T, F extends (v: Partial<T>) =
数字
,但实际上它被推断为any
function f<T>(f: (v: Partial<T>) => any): ReturnType<typeof f> {
return f({})
}
const res = f<number>((v) => 0) // any
在第二个示例中,您不需要将
传递到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
函数f any>(f:f):返回类型{
返回f({})
}
常数res=f((v)=>0)//res:number
常量res2=f((p:{x?:string})=>p.x)//res2:string
将所有函数命名为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