我正在try 输入一个更高阶的函数.其基本思想是向HIGH传递一个函数FN,它返回一个接受完全相同的参数并提供相同返回类型的函数.
这是一种try 更好地理解这种语言的练习.我有一些东西可以工作,但会从输入参数中删除类型.请参见下面的类型Test1和Test2:
export function high<R>(fn: (...args: any[]) => R) {
return (...args: any[]) => {
const moddedArgs = args.map((el) =>
typeof el === "string" ? el + "OMG" : el
);
return fn(...moddedArgs);
};
}
const test1 = (nr1: number, str1?: string) => (str1 ?? "Wow").repeat(nr1);
test1(3, "yo");
// returns yoyoyo
test1(3);
// returns WowWowWow
const test2 = high(test1);
test2(3, "yo");
// returns yoOMGyoOMGyoOMG
type Test1 = typeof test1;
// type Test1 = (nr1: number, str1?: string) => string
type Test2 = typeof test2;
// type Test2 = (...args: any[]) => string
我try 对参数使用P型实参,但它并不能很好地处理可选参数.
有什么办法可以解决这个问题吗?