用数组reduce typescript 给累加器给予类型

qxgroojn  于 2023-01-31  发布在  TypeScript
关注(0)|答案(2)|浏览(144)

我正在用某个函数生成带有时间间隔的对象,它返回["00:00", "00:30", "01:00"]...,但是为了我的目的,我需要有obj-map {{ "00:00": "00:00" }, { "00:30": "00:30" }, { "01:00": "01:00" }}
我在输入下面的reduce函数时遇到了问题。如何输入acc或函数的返回值,以避免使用any作为acc的类型?

generateTimeIntervals(0, 1440, 30)
  .reduce((acc, val) => {
    acc[val] = val;
    return acc;
  }, {})
ki1q1bka

ki1q1bka1#

我如何键入acc或func的返回值以避免使用any作为acc的类型?
你可以通过提供你所提供的{}种子的类型来实现这一点,例如Record<string, string>(但确切的类型并不是这里的重点,重点是如何分配一个类型才是你所要求的):

let result = generateTimeIntervals(0, 1440, 30).reduce((acc, val) => {
    acc[val] = val;
    return acc;
}, {} as Record<string, string>);

TypeScript将能够充分遵循reduce调用的逻辑,从而基于此为您键入返回值。
或者,不要使用reduce,而只需键入result

let result: Record<string, string> = {};
for (const val of generateTimeIntervals(0, 1440, 30)) {
    result[val] = val;
}
vh0rcniy

vh0rcniy2#

可以将类型作为参数传递给reduce

let result = generateTimeIntervals(0, 1440, 30).reduce<Record<string, string>>((acc, val) => {
  acc[val] = val;
  return acc;
}, {})

请看下面的例子:www.example.comhttps://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABAcwKZlQJwIZVQFRgFtUBJMPTAN2wBsBnACmwC4wQiAjLAGkU5aJ2XXogiDh3TAEpEAbwCwAKESJMqKCExIA2stWqAylEwwwyZtL7HT5xpyuIbZixGn7EAXWUBfZctoNNVR6EFooRABeFHQsXAJiMgosGgZGAAY+AEYAFhzMxABmdOkAOnUAExAIVAAeACVUCDhMCtr6Exc+DttkAD4+xmYICD5U2Ui++Q9sEZ1UzyjEVIBuD3VNbURZiDWlHz45H3clZWawejhA0to4CwAidVDw+74nsKhpIA

相关问题