Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型脚本反转参数顺序_Javascript_Typescript - Fatal编程技术网

Javascript 类型脚本反转参数顺序

Javascript 类型脚本反转参数顺序,javascript,typescript,Javascript,Typescript,反转函数参数顺序非常简单,但是推断反转函数的类型似乎非常困难(或者不可能,因此问题就来了) 给定此(非ts)代码 我试图找到一种方法来键入返回的包装函数,使fn的参数反向。我似乎找不到这样做的方法,也找不到关于它的任何文档 例如: export const flip = <T extends (...args: any[]) => any>(fn: T) => (...args: any[]) => fn(...Array.from(args).revers

反转函数参数顺序非常简单,但是推断反转函数的类型似乎非常困难(或者不可能,因此问题就来了)

给定此(非ts)代码

我试图找到一种方法来键入返回的包装函数,使
fn
的参数反向。我似乎找不到这样做的方法,也找不到关于它的任何文档

例如:

export const flip = <T extends (...args: any[]) => any>(fn: T) =>
    (...args: any[]) => fn(...Array.from(args).reverse());
export const flip=any>(fn:T)=>
(…args:any[])=>fn(…Array.from(args.reverse());
正确地说,返回的类型是
(…args:any[])=>T


是否有一种方法可以删除
(…args:any[])=>fn(…)
这将允许TS理解包装函数的参数顺序只是内部函数参数的反转数组?

函数参数列表是一个
元组
,因此在调用
数组后,需要将其转换回正确的
元组
类型。反转


const reverse=供全面讨论。

函数参数列表是一个
元组
,因此在调用
Array.reverse
后,需要将其转换回正确的
元组
类型


const reverse=供全面讨论。

不,不可能。您可能只需要有限数量的参数就可以完成此操作,并且您将在rest和可选参数方面遇到问题。@TitianCernicova Dragomir我认为可能是这样,所以我最好的办法是保持原样。谢谢。我认为一般的解决方案是不可能的,在这种情况下,人们所做的是对所有有意义的情况进行一组签名,例如,对于具有0到9个参数的函数,10个签名。@alx正是我所建议的。。也许这不是我想要的@好吧,我想知道,如果没有rest和可选参数,这将如何工作!n个签名案例。还是我把这个解释错了?不,不可能。您可能只需要有限数量的参数就可以完成此操作,并且您将在rest和可选参数方面遇到问题。@TitianCernicova Dragomir我认为可能是这样,所以我最好的办法是保持原样。谢谢。我认为一般的解决方案是不可能的,在这种情况下,人们所做的是对所有有意义的情况进行一组签名,例如,对于具有0到9个参数的函数,10个签名。@alx正是我所建议的。。也许这不是我想要的@好吧,我想知道,如果没有rest和可选参数,这将如何工作!n个签名案例。还是我的解释有误?
export const flip = <T extends (...args: any[]) => any>(fn: T) =>
    (...args: any[]) => fn(...Array.from(args).reverse());