在Typescript中我想创建一个函数,它将获取一个函数并返回一个具有相同输入输出的函数。函数本身需要是通用的。这样它可以接受任意数量的参数并返回任何类型。
function improveFunction <T,U>(func:'that takes T and returns U') : (T):U {
var newFunc = doDomethingToTheFunction(func);
return newFunc;
}
如果我正在返回函数本身,这将起作用。但是因为我使用参数special参数来接受任意数量的参数,所以我实际上创建了一个新的函数,而这些函数是打字稿编译器无法理解的。
编辑:
我还有一个变种来自
(U => T) to (U => Promise<T>)
function ddd<T>(func: (...x: any[]) => T) : (...x: any[]) => ng.IPromise<T> {
// return a function returning a promise of T;
}
答案 0 :(得分:6)
你走了:
function f<A extends Function>(a:A):A {
var newFunc = (...x:any[]) => {
console.log('('+x.join(',')+') => ', a.apply(undefined, x));
return null;
}
return <any>newFunc;
}
function a(j:string, k:number): boolean {
return j === String(k);
}
var b = f(a);
b("1", 1);
b("a", 2);
b('123','123'); // ERROR