我发现自己经常使用像这样的数组
[
{key1: val1, key2: value2, key3: val3},
{key1: val1, key2: value2, key3: val3},
{key1: val1, key2: value2, key3: val3}]
我想把它转换成字典/地图,例如
[val1FromFirstElement]: {key2: val2, key3, val3},
[val1FromSecondElement]: {key2: val2, key3, val3},
[val1ThirdElement]: {key2: val2, key3, val3}}
我经常使用reduce,但这会使代码忙碌。我想写一个通用的助手,我们可以确保我们映射的数组期望我们想要索引的键(在上面的例子中,key1)。
function toDictionary<T, Key extends keyof T> (array: T[], key: Key) {
return array.reduce((prev, cur: T) => {
return{...prev, ...{[cur[key]]: cur}};
}, {})
}
问题是[cur[key]]
不会编译说明A computed property name must be of type 'string', 'number', 'symbol', or 'any'.
我相信索引访问类型只能是number | string | symbol
,但我不明白为什么我必须指定其他任何内容,因为打字稿应该知道键类型只能是这些类型之一?正确的?
希望有人能告诉我我的误解在哪里。