在 Ramda 的管道函数上传播数组会产生类型错误 "Expected 1-6 but got 0 or more"
Spreading array over Ramda's pipe function gives type error "Expected 1-6 but got 0 or more"
我不知道如何才能完成这项工作。我在打字稿中定义了一个函数,它基本上包装了 Ramda 的管道函数。我想接受可能是函数也可能不是函数的值,将非函数值包装在常量函数中,然后将其全部传递给管道。
这是我尝试编写的原始函数:
const convertToPipeable = (values: any[]) => {
const valueFunctions = map(valueAsFunction, values);
return pipe(...valueFunctions);
}
在我将 valueFunctions 分布在管道上时,打字稿抱怨说 "Expected 1-6 arguments, but got 0 or more"。我意识到这是因为管道是为每个参数长度情况(从 1 到 6)重载键入的,但我很难相信不可能将这个数组分布在它上面。我尝试了几种方法,从将 values
参数定义为一个大元组,到使用 Ramda 的 apply
方法代替展开运算符,并且其中的 none 工作正常。
如果没有好的输入方式,有什么替代方法?
干杯!
如果 pipe
的类型声明最多只接受 6 个参数,但你有一个数组(就编译器所知)可以任意长,那么你可以用 pipe
是:
return (<any>pipe)(...valueFunctions);
我对 Ramda 不熟悉,不知道是否有其他 Ramda 函数可以替代使用。
我不知道如何才能完成这项工作。我在打字稿中定义了一个函数,它基本上包装了 Ramda 的管道函数。我想接受可能是函数也可能不是函数的值,将非函数值包装在常量函数中,然后将其全部传递给管道。
这是我尝试编写的原始函数:
const convertToPipeable = (values: any[]) => {
const valueFunctions = map(valueAsFunction, values);
return pipe(...valueFunctions);
}
在我将 valueFunctions 分布在管道上时,打字稿抱怨说 "Expected 1-6 arguments, but got 0 or more"。我意识到这是因为管道是为每个参数长度情况(从 1 到 6)重载键入的,但我很难相信不可能将这个数组分布在它上面。我尝试了几种方法,从将 values
参数定义为一个大元组,到使用 Ramda 的 apply
方法代替展开运算符,并且其中的 none 工作正常。
如果没有好的输入方式,有什么替代方法?
干杯!
如果 pipe
的类型声明最多只接受 6 个参数,但你有一个数组(就编译器所知)可以任意长,那么你可以用 pipe
是:
return (<any>pipe)(...valueFunctions);
我对 Ramda 不熟悉,不知道是否有其他 Ramda 函数可以替代使用。