Я пытаюсь уменьшить коллекцию ListAdItemResponse[]
до {[name: string]: Date}
, введите один из моих тестов и убедитесь, что каждая последующая опубликованная дата предшествует текущей (например, отсортирована по publishedAt
в порядке убывания):
_.reduce<ListAdItemResponse, {[name: string]: Date}>(
data,
(result, val) => {
expect(new Date(val.publishedAt)).to.be.beforeTime(
new Date(result.publishedAt),
)
return {publishedAt: val.publishedAt}
})
Используя TypeScript 2.9.2, я получаю эту странную противоречивую ошибку («Ожидается 2-3 аргумента, но получено 2»). Согласно документации Lodash, третий аргумент является необязательным, но я не могу обойти эту ошибку, что бы я ни пытался. Есть идеи, что тут может быть не так? Спасибо.
P.S. Компилируется без ошибок, но, очевидно, нарушает мой тест:
_.reduce<ListAdItemResponse, {[name: string]: Date}>(
data,
(result, val) => {
expect(new Date(val.publishedAt)).to.be.beforeTime(
new Date(result.publishedAt),
)
return {publishedAt: val.publishedAt}
}, {}) // with {} added as 3rd argument
Обновление 9/2/18:
По предложению Мэтта, я попробовал этот подход, но на этот раз получил 3 ошибки компиляции. Похоже, он ожидает, что alis.data
тип коллекции будет {[name: string]: Date}
вместо ListAdItemResponse[]
, как сейчас:
_.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}
})