创建一个返回具有相同签名的函数的泛型函数

时间:2015-03-11 22:15:11

标签: generics typescript

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

1 个答案:

答案 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