创建一个返回具有相同签名的函数的通用函数

create a generic function returning a function with the same signature

在 Typescript 中,我想创建一个函数,它将接受一个函数和 return 一个具有相同输入输出的函数。函数本身需要是通用的。这样它就可以接受任意数量的参数和 return 任何类型。

function improveFunction <T,U>(func:'that takes T and returns U') : (T):U {
  var newFunc = doDomethingToTheFunction(func); 
  return newFunc;
}

如果我 return 调用函数本身,这会起作用。但是因为我使用 arguments 特殊参数来接受任意数量的参数,所以我实际上是在创建一个打字稿编译器无法理解的新函数。

编辑:

我又做了一个变体

(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;
}

给你:

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