typescript - 打字稿中有没有办法确保传递给更高阶的函数具有特定的返回类型?
问题描述
一个函数需要另一个通用函数作为输入,它被定义为:
function higherOrderFunction(fn: Function): Function<void> {
return (...args: any[]) => fn(...args);
}
称为
function fun(x: number, y: string) { console.log(`${x}${+y}`); }
const higherOrderFunctionWithFunction = higherOrderFunction(fun);
higherOrderFunctionWithFunction(1, '3')
这抛出
ts(2315):函数不是泛型的
这是有道理的。因此,我如何强制返回的函数higherOrderFunction
具有特定的返回类型(无论是void
其他类型)?(无论我们是否在fun
“低阶”函数中指定返回类型)
我知道打字稿具有ReturnType
实用功能。但是,在这种情况下如何使用它?
解决方案
您可以higherOrderFunction
使用类型为参数函数的返回类型的泛型。
一般来说,一个函数会像(...args: any[]) => T
,T
是返回类型。
首先,为函数类型创建一个别名类型,然后使用该类型作为参数和返回类型higherOrderFunction
:
type FunctionType<T> = (...args: any[]) => T;
function higherOrderFunction<T>(fn: FunctionType<T>): FunctionType<T> {
return (...args: any[]) => fn(...args);
}
用法,
function fun(x: number, y: string) {
console.log(`${x}${+y}`);
}
const higherOrderFunctionWithFunction = higherOrderFunction(fun);
const result = higherOrderFunctionWithFunction(1, '3'); // return "void"
function fun(x: number, y: string) {
return `${x}${+y}`;
}
const higherOrderFunctionWithFunction = higherOrderFunction(fun);
const result = higherOrderFunctionWithFunction(1, '3'); // return string