使用数组减少打字稿为累加器提供类型

Igo*_*nko 9 javascript arrays reduce typescript

我正在用一些 func 生成具有时间间隔的对象,它返回 ["00:00","00:30","01:00"]... ,但为了我的目的,我需要 obj-map {{"00:00": "00:00"}, {"00:30":"00:30"}, {"01:00":"01:00"}} 我在下面输入 reduce func 时遇到问题,我如何输入 acc 或 func 的返回值到避免使用anyas 类型 for acc?

generateTimeIntervals(0, 1440, 30).reduce((acc, val) => {
  acc[val] = val;
  return acc;
}, {})
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 19

我如何输入 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>)
Run Code Online (Sandbox Code Playgroud)

TypeScript 将能够充分遵循reduce调用的逻辑,从而基于此为您键入返回值。


从您的reduce代码是否还需要进行一些调整的问题中,我并不完全清楚,但这是一个不同的问题......


cas*_*hol 17

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

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

请参阅此处的示例: https: //www.typescriptlang.org/play ?#code/GYVwdgxgLglg9mABAcwKZlQJwIZVQFRgFtUBJMPTAN2wBsBnACmwC4wQiAjLAGkU5aJ2XXogiDh3TAEpEAbwCwAKESJMqKCExIA2stWqAylEwwwyZtL7HT5xpyuIbZix Gn7EAXWUBfZctoNNVR6EFooRABeFHQsXAJiMgosGgZGAAY+AEYAFhzMxABmdOkAOnUAExAIVAAeACVUCDhMCtr6Exc+DttkAD4+xmYICD5U2Ui++Q9sEZ1UzyjEVIBuD3VNbURZiDWlHz45H3clZWawejhaA0to4Cw辅助VDw+74nsKhpIA

  • 谢谢,这似乎是最惯用的答案 (2认同)