如何在打字稿中重写此reduce函数?

时间:2019-06-12 15:30:07

标签: javascript typescript reduce

我目前正在尝试将一些React本机代码转换为Typescript,并且有一些reduce函数会引发错误。如何重写此代码,以便在运行时不会出现类型问题?

我尝试了各种尝试键入函数以及预期输出的方法,但到目前为止还没有运气。

myArray: data.items.reduce( (map: object, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, [])

我对象的myArray项目应填充myInterface中定义的项目数组。运行时,我目前收到以下错误。

TypeScript error in MyPath/:

Element implicitly has an 'any' type because expression of type 'number' can't be used to index type '{}'.
  No index signature with a parameter of type 'number' was found on type '{}'.  TS7053

    128 |                 appVersion: data.version || "",
    129 |                 offline: false,
    130 |                 myArray: data.items.reduce( (map: object, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, [])
        |                                                                                           ^
    131 |             });

2 个答案:

答案 0 :(得分:0)

您的地图属于object类型。您必须提供一个对象作为reduce函数的初始值。

myArray: data.items.reduce(
   (map: Record<myInterface['id'], myInterface>, obj: myInterface): Record<myInterface['id'], myInterface>  => 
         { map[obj.id] = obj; return map; }, 
    {})

答案 1 :(得分:0)

帕特里克·罗伯特(Patrick Robert)的答案已解决。谢谢!

 myArray: data.items.reduce( (map: Record<myInterface['id'], myInterface>, obj: myInterface) : object  => { map[obj.id] = obj; return map; }, {})