Typescript Lodash“减少();应为2-3个参数,但得到2个“;打字错误

Typescript Lodash“减少();应为2-3个参数,但得到2个“;打字错误,typescript,lodash,Typescript,Lodash,我试图将ListAdItemResponse[]集合缩减为{[name:string]:Date}在我的一个测试中键入,并检查每个后续发布的日期是否早于当前日期(例如,按publishedAt降序排序): 如果要省略第三个参数,则输入项和累加器的类型应相同,因此只需传递一个类型参数: _.reduce<{[name: string]: Date}>(...) 然后,您对\uu0.reduce的调用与您想要的重载不匹配,因为ListAdItemResponse不可分配给{[name:

我试图将
ListAdItemResponse[]
集合缩减为
{[name:string]:Date}
在我的一个测试中键入,并检查每个后续发布的日期是否早于当前日期(例如,按
publishedAt
降序排序):


如果要省略第三个参数,则输入项和累加器的类型应相同,因此只需传递一个类型参数:

_.reduce<{[name: string]: Date}>(...)
然后,您对
\uu0.reduce
的调用与您想要的重载不匹配,因为
ListAdItemResponse
不可分配给
{[name:string]:Date}
,因为它没有索引签名。(令人困惑的是,TypeScript的错误#1是基于一个错误的假设,即您需要一个不同的重载,用于减少对象的过键数。)对于对象文字类型,有一个特殊的例外,比如您从减缩器返回的类型。您可能应该做的是将状态类型更改为
{publishedAt:Date}
,因为这是您正在使用的唯一字段:

_.reduce<{publishedAt: Date}>(...)
\减少(…)

这会使错误2和3消失。

谢谢。我也尝试过这种方法(我想我现在已经尝试了所有方法),但它给了我3个编译错误,错误1是最大的问题,因为我可以通过键入
result
val
参数来修复#2,3。我已经更新了描述来展示我所拥有的。你就是那个人!这确实使这些错误消失了。我仍在努力思考这个解决方案,但非常感谢您以正确的方式指导我。能够为
.reduce()
.map()
类型的方法找到正确的类型对我来说总是一个挑战。
_.reduce<{[name: string]: Date}>(
  alis.data, // <-- error 1: Argument of type 'ListAdItemResponse[]' is not assignable to parameter of type '{ [name: string]: Date; } | null | undefined'.Type 'ListAdItemResponse[]' is not assignable to type '{ [name: string]: Date; }'. Index signature is missing in type 'ListAdItemResponse[]'.
  (result, val) => { // <-- errors 2,3: Parameter 'result' implicitly has an 'any' type. Parameter 'val' implicitly has an 'any' type.
    expect(new Date(val.publishedAt)).to.be.beforeTime(
      new Date(result.publishedAt),
    )
    return {publishedAt: val.publishedAt}
  })
_.reduce<{[name: string]: Date}>(...)
interface ListAdItemResponse {
    publishedAt: Date;
    // other fields...
}
_.reduce<{publishedAt: Date}>(...)