一个函数需要另一个通用函数作为输入,其定义为:
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
实用程序功能。但是,在这种情况下如何使用呢?
答案 0 :(得分:0)
您可以使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