创建一个返回具有相同签名的函数的泛型函数 [英] create a generic function returning a function with the same signature
本文介绍了创建一个返回具有相同签名的函数的泛型函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
function improveFunction< T,U>(func:' (T):U(
var newFunc = doDomethingToTheFunction(func);
返回newFunc;
}
如果我正在返回函数本身,这将起作用。但是由于我使用的参数特殊参数能够接受任意数量的参数,我实际上正在创建一个打字稿编译器无法理解的新函数。
编辑:
我做了另外一个变种,从
( (func:(... x:any [])=> T):((u => T)to(U => Promise )
function ddd< T> ... x:any [])=> ng.IPromise< T> {
//返回一个返回T的承诺的函数;
}
解决方案
(a:A):A {
var newFunc =(... x:b)
函数f< A extends Function>任何[])=> {
console.log('('+ x.join(',')+')=>',a.apply(undefined,x));
返回null;
}
return< any> newFunc;
函数a(j:string,k:number):boolean {
return j === String(k);
}
var b = f(a);
b(1,1);
b(a,2);
b('123','123'); //错误
In Typescript I want to create a function that will take a function and return a function with the same input-output. the function itself needs to be generic. so that it can take any number of arguments and return any type.
function improveFunction <T,U>(func:'that takes T and returns U') : (T):U {
var newFunc = doDomethingToTheFunction(func);
return newFunc;
}
if I was returning the function itself this would work. But since I am using the arguments special parameter to be able to accept any number of argument I am in fact creating a new function that the typescript compiler can't understand.
Edit:
I made one more variant to go from
(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;
}
解决方案
Here you go :
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
这篇关于创建一个返回具有相同签名的函数的泛型函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文