【发布时间】:2023-04-10 14:15:01
【问题描述】:
我有一个具有嵌套对象值的对象,我想反转键值对。我的代码只在普通的 javascript 中工作,但在 Typescript 中出现编译错误。
这是错误:
元素隐式具有“any”类型,因为“number”类型的表达式不能用于索引类型“{}”。 在“{}”类型上找不到带有“数字”类型参数的索引签名。
请指教。
预期输出:
{
"5": "dataCut-1",
"7": "dataCut-2",
"8": "dataCut-3",
"12": "dataCut-4",
"15": "dataCut-5",
"16": "dataCut-6",
"undefined": "dataCut-7"
}
【问题讨论】:
-
您需要为初始对象指定一个显式类型,否则当用作累加器参数时,它会被推断为
{}。在这种情况下,Record<string, string>看起来会起作用。例如:data.reduce((acc, [key, value]) => (acc[value.id!] = key, acc), {} as Record<string, string>). -
我鼓励你不要改变
accumulator。如果您使用reduce,我假设您正在尝试以实用的方式制作它。考虑这个例子:{...acc, [id]: key }
标签: typescript object