typescript - 在 Ramda 的管道函数上扩展数组给出类型错误“预期 1-6 但得到 0 或更多”
问题描述
我不知道如何才能完成这项工作。我在 typescript 中定义了一个函数,它基本上包装了 Ramda 的管道函数。我想接受可能是函数也可能不是函数的值,将非函数值包装在常量函数中,然后将其全部传递给管道。
这是我尝试编写的原始函数:
const convertToPipeable = (values: any[]) => {
const valueFunctions = map(valueAsFunction, values);
return pipe(...valueFunctions);
}
在我通过管道传播 valueFunctions 时,打字稿抱怨说“预期有 1-6 个参数,但得到了 0 个或更多”。我意识到这是因为管道为每个参数长度情况(从 1 到 6)输入了重载,但我很难相信不可能将这个数组传播到它上面。我已经尝试了几件事,从将values
参数定义为一个大元组,到使用 Ramda 的apply
方法代替扩展运算符,但这些都没有正常工作。
如果没有很好的方法来输入这个,还有什么替代方法?
干杯!
解决方案
如果类型声明pipe
最多只接受 6 个参数,但你有一个数组(据编译器所知)可以任意长,那么你能做的最好的事情pipe
是:
return (<any>pipe)(...valueFunctions);
我不熟悉 Ramda,不知道您是否可以使用其他 Ramda 功能。
推荐阅读
- ios - firebase childByAutoId.key 是可选的
- windows - 批处理文件在创建安装程序时给出无效路径错误
- spring-boot - Spring Boot - 在启动时从数据库中读取数据的最佳方式
- vsto - 在 Outlook 2007 VSTO 代码中获取 SentOnBehalfOfName 的电子邮件地址
- android - Xamarin:如何在 UI 线程上执行长时间运行的操作时让 UI 重绘(不使用 async/await)
- c++ - 在 Mac 上通过可执行文件(编译的 c++ 代码)打开 .txt 文件
- angular - 使用 Angular 4 开始一个新的 Ionic 3 项目
- python - 创建对python的列表
- javascript - 在js的回调中使用公共函数时无法读取属性错误
- mysql - 如何使用 LVM 快照设置 MySQL 主从复制