创建一个返回具有相同签名的函数的通用函数
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
在 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