我正在尝试创建一个childDict
供以后使用。实际上,我不仅尝试,而且还成功。
此有效:
const childDict = new Map(
this.voteCards.toArray().map(card => {
return [card.placeInfo.id, card.placeInfo];
})
);
但是,口译员并不高兴。我会避免给您错误消息,只是类型冲突。
那么如何将列表映射到字典或地图上?
答案 0 :(得分:0)
Map
类型在这里(对我来说)https://github.com/Microsoft/TypeScript/blob/master/src/lib/es2015.collection.d.ts#L12
这是tsconfig.json中的这些lib
设置:
"lib": [
"es2016",
"es2017.intl",
"es2017.object",
"es2017.string",
"es2017.typedarrays",
"esnext.asynciterable",
"dom"
]
您可能遇到的问题是,map
函数返回的内容不是ReadOnly数组。
答案 1 :(得分:0)
TypeScript对于元组不是很好。有人注意到了这个问题,并提交了一个错误8936,但已将其关闭
没有上下文类型就永远不能推断出元组类型。
因此,您可以使用map.set()
来避免这种类型的错误。
var voteCardsArray = [
{ placeInfo: { id: 42, desc: 'stuff 42' } },
{ placeInfo: { id: 65, desc: 'stuff 65' } },
{ placeInfo: { id: 89, desc: 'stuff 89' } },
];
const childDict = new Map();
for (let card of voteCardsArray) {
childDict.set(card.placeInfo.id, card.placeInfo);
}
// Example usage
const card42 = childDict.get(42);
console.log(card42);
答案 2 :(得分:0)
这是一种在一行中将对象数组转换为字典的方法:
var voteCardsArray = [
{ placeInfo: { id: 42, desc: 'stuff 42' } },
{ placeInfo: { id: 65, desc: 'stuff 65' } },
{ placeInfo: { id: 89, desc: 'stuff 89' } },
];
var res = Object.assign({}, ...voteCardsArray.map(card => ({[card.placeInfo.id]: card.placeInfo})));
console.log(res)