【发布时间】:2021-04-23 17:26:49
【问题描述】:
我正在尝试创建一个高阶函数,它接受一个回调函数并返回一个匿名函数,该函数又返回回调函数的结果。返回的匿名函数接受一个名为 number (n) 的参数。我将此参数用作匿名函数返回的结果类型的条件。基本上,如果数字大于 1,则返回回调函数的结果数组,否则返回回调函数的结果。但我似乎无法让这个函数重载定义与泛型类型一起使用。
export type ReturnedFunctionType<T> = {
(): T
(n: number): T[]
(n?: number): T | T[]
}
export function higherOrderFn<T> (cb: () => T): ReturnedFunctionType<T> {
return function (n = 1) {
if (n === 1) {
return cb()
} else {
return Array(n).fill(null).map(_ => cb())
}
}
}
错误提示:
Type '(n?: number) => T | T[]' is not assignable to type 'ReturnedFunctionType<T>'.
Type 'T | T[]' is not assignable to type 'T[]'.
Type 'T' is not assignable to type 'T[]'.
谁能解释我为什么不能这样做?或者我怎样才能正确输入这样的函数?
【问题讨论】:
-
它认为最好的选择是“export type ReturnedFunctionType
= (n?: number) => T | T[];”。 -
是的,它消除了错误。但是应该有一种方法可以让我知道返回值的确切类型,这取决于我如何调用函数,对吧?
标签: typescript typescript-typings typescript-generics