【问题标题】:Currying with default parameters in typescript using lodash使用 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)

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

由此引发了两个问题:

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

【问题讨论】:

  • 有趣,我看到它解析为this overloadSandbox。您可以尝试将显式类型添加到curry,例如curry&lt;Model&lt;number&gt;, number, Promise&lt;void&gt;&gt;

标签: typescript lodash typescript-generics currying


【解决方案1】:

使用

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

而不是

const specificGetAll = curry(getAll)(model)

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

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

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 2011-08-06
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多