使用 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<Model<number>, number, Promise<void>>
【参考方案1】:
使用
const specificGetAll = curry(getAll, 2)(model)
而不是
const specificGetAll = curry(getAll)(model)
由于limit
是getAll
函数中的一个可选参数,getAll.length
是1。Lodash 错误地认为你的函数getAll
有一个参数,所以curry
返回一个promise 而不是一个函数。
至于您的第二个问题:柯里化是一种众所周知且广泛使用的编程技术。其他编写您的代码的程序员理解它应该没有任何困难。但是,根据使用的库,自动生成柯里化函数的类型可能偶尔会出现问题。在这种情况下,请准备好手动添加一些类型。
【讨论】:
以上是关于使用 lodash 在打字稿中使用默认参数进行柯里化的主要内容,如果未能解决你的问题,请参考以下文章