所以这可能很难理解,但现在它来了。。。
我想创建一个函数
f()
它接受一个函数作为其参数,并返回一个具有相同参数的新函数
不包括
第一个参数(可以具体键入)。
function f<R, A extends (s: string) => R>(func: A): () => R;
function f<R, T1, A extends (s: string, a1: T1) => R>(func: A): (a1: T1) => R;
function f<R, T1, T2, A extends (s: string, a1: T1, a2: T2) => R>(func: A): (a1: T1, a2: T2) => R;
function f(func: (...x: any[]) => any) {
return (...x) => {
return func('hello', ...x);
};
}
在本例中,
f()
基本上应该采用第一个参数为字符串的任何函数(
s
)并返回一个具有0到2个参数的新函数(
a1
&
a2
如果传递函数中存在;
s
将被排除在外)。
因此,如果我通过:
function testFunc(x: string, y: number): number{
return x.length + y;
}
const x = f(testFunc);
我希望
x
待输入类型
(a1: number) => number
.然而,我却
(a1: {}) => {}
。。。
我想做的事可能吗?