typescript - 如何使下面的代码成为正确的类型,期望自动推断出函数的返回值类型
问题描述
这里, 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.
解决方案
您不需要在第二个示例中传递<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
推荐阅读
- c# - UWP 以编程方式绑定动态表单
- python - 如何在 urlretrieve 中使用变量代替目标文件
- swift - 如何从 Double 数组创建元组数组?
- android - 当我单击链接时 webview 崩溃
- amazon-web-services - VPC 中的 AWS Lambda ENI 限制说明
- .htaccess - 如何在不更改 URL 的情况下进行重定向(完全,不仅仅是一页)
- c# - 不要重复自己或通过重复自己来更清楚?
- jquery - 如何选择输入:具有特定属性(最大长度)的特定值的文本?
- c# - 在 C# 中插入矢量图像
- c# - 如何为 Microsoft.codeAnalysis.CSharp 配置 BindingRedirects