Typescript 在compose上扩展FN数组会导致;应为1-6个参数,但得到0个或更多“;
我知道typescript看到一个扩展,并假设它可以是任意长度的,这就是为什么它抱怨有太多的参数(compose function arity是1-6) 当获取长度未知的函数数组时,如何满足编译器的要求Typescript 在compose上扩展FN数组会导致;应为1-6个参数,但得到0个或更多“;,typescript,ramda.js,Typescript,Ramda.js,我知道typescript看到一个扩展,并假设它可以是任意长度的,这就是为什么它抱怨有太多的参数(compose function arity是1-6) 当获取长度未知的函数数组时,如何满足编译器的要求 从“ramda”导入{compose}; //就编译而言,fns可能是任意长度(甚至超过6) 常数fns=[ n=>n*10, n=>n+1, ] const composed=compose(…fns)//Typescript:“应为1-6个参数,但得到0个或更多” 我从以下方面找到了解决方法
从“ramda”导入{compose};
//就编译而言,fns可能是任意长度(甚至超过6)
常数fns=[
n=>n*10,
n=>n+1,
]
const composed=compose(…fns)//Typescript:“应为1-6个参数,但得到0个或更多”
我从以下方面找到了解决方法:
const composeList=list=>R.reduceRight(R.compose,R.identity,list)
const composed=composeList(fns)//不再扰乱编译器
组成(2)/=>30
根据我对上面代码片段的理解,我们将把列表中的每个项目逐一传递给compose
函数。在这种情况下,<代码> R.identity <代码>中间将返回最后一个函数(<代码> fn(0)在数组中或<代码>撰写(FN) >其中<代码> fn>代码>是最后一个fn.< /p>的组合版本。
它相当于R.compose(R.compose(fns[0]),fns[1])
它为数组中的每个项嵌套一个组合。由于我使用1-2个参数调用每个组合
,它不再扰乱编译器。如果您想让编译器知道一个数组文本有多少个元素,您可能需要使用a来要求编译器将其推断为:
(还要注意,我将回调参数注释为number
,否则您将得到一个隐式any
,这可能是您不想要的)
然后,compose()
将按预期工作:
const composed = compose(...fns); // no error
现在,您只需要受堆栈大小的限制。列表的长度不能超过JS解释器允许的堆栈帧数。
const composed = compose(...fns); // no error