使用 lodash 在打字稿中使用默认参数进行柯里化

Posted

技术标签:

【中文标题】使用 lodash 在打字稿中使用默认参数进行柯里化【英文标题】:Currying with default parameters in typescript using lodash 【发布时间】:2021-11-15 04:32:57 【问题描述】:

我有一个应该有一个通用参数的函数,像这样:

async function getAll<T>(model: Model<T>, limit = 10) 
   ....

所以我决定使用 lodash curry 来调用这个函数:

const specificGetAll = curry(getAll)(model)
specificGetAll(10)

这会导致“此表达式不可调用。类型 '' 没有调用签名。”

由此引发了两个问题:

    在这里做柯里化是正确的吗(例如,与 ts 装饰器比较)? 是什么导致了这个错误,如何解决?

【问题讨论】:

有趣,我看到它解析为this overload。 Sandbox。您可以尝试将显式类型添加到curry,例如curry&lt;Model&lt;number&gt;, number, Promise&lt;void&gt;&gt; 【参考方案1】:

使用

const specificGetAll = curry(getAll, 2)(model)

而不是

const specificGetAll = curry(getAll)(model)

由于limitgetAll 函数中的一个可选参数,getAll.length 是1。Lodash 错误地认为你的函数getAll 有一个参数,所以curry 返回一个promise 而不是一个函数。

至于您的第二个问题:柯里化是一种众所周知且广泛使用的编程技术。其他编写您的代码的程序员理解它应该没有任何困难。但是,根据使用的库,自动生成柯里化函数的类型可能偶尔会出现问题。在这种情况下,请准备好手动添加一些类型。

【讨论】:

以上是关于使用 lodash 在打字稿中使用默认参数进行柯里化的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中使用可选参数调用类构造函数[重复]

尝试在打字稿中使用猫鼬和 bcrypt 比较密码

是否可以使用打字稿中的关键字类型检查句子是否包含某个单词?

在打字稿中的类中创建具有未知参数的方法

根据打字稿中的请求参数设置猫鼬的查询过滤器

在打字稿中推断抽象类的参数