【发布时间】:2021-09-13 21:40:12
【问题描述】:
我有一个高阶函数,它根据作为参数传递的泛型函数正确推断其返回函数的类型,通过一个简单的示例可能更容易理解:
function someFunction<T>(f: (s: string) => T) {
return function(s: string): T {
return f(s)
}
}
所以,如果我传递一个返回string 的函数,返回的函数将正确推断类型:
const funcStr = someFunction((s: string) => s)
// ^ const funcStr: (s: string) => string
如果我传递一个返回 number 的函数,它将返回一个函数,该函数又返回一个数字:
const funcNum = someFunction((s: string) => Number(s))
// ^ const funcStr: (s: string) => number
现在我想为高阶函数添加一个默认值,但无法使其工作:
// Type '(s: string) => number' is not assignable to type '(s: string) => T'.
function someFunction<T>(f: (s: string) => T = (s: string) => Number(s)) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return function(s: string): T {
return f(s)
}
}
如何在高阶函数中添加默认函数,并且在使用另一个函数时仍使其推断类型?
【问题讨论】:
标签: typescript types higher-order-functions