首页 > 解决方案 > TypeScript - 如何使用数组映射到 ES 6 映射?

问题描述

假设我有一个键值对象数组:

const data = [
    {key: "object1", value: "data1"},
    {key: "object2", value: "data2"},
    {key: "object3", value: "data3"},
]

const mappedData = data.map(x => [x.key, x.value]);

const ES6Map = new Map<string, string>(mappedData.values())

如何将其转换为 ES 6 地图?它适用于 JavaScript,但 TypeScript 会抱怨。在这里我得到了错误Argument of type 'IterableIterator<string[]>' is not assignable to parameter of type 'ReadonlyArray<[string, string]>'. Property 'length' is missing in type 'IterableIterator<string[]>'.

标签: javascripttypescriptdictionaryecmascript-6

解决方案


您需要type assertion告诉 typescript 您的mappedDatais 类型Array<[string,string]>,而不是构造函数需要string[][]的子类型。Array<[any,any]>Map

const mappedData = data.map(x => [x.key, x.value] as [string, string]);

代替

const mappedData = data.map(x => [x.key, x.value]);

并且

values()如评论中指出的那样挂断电话。


推荐阅读