javascript - TypeScript - 如何使用数组映射到 ES 6 映射?

标签 javascript typescript dictionary ecmascript-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 map ?它可以在 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[]>'.

最佳答案

你需要做type assertion并告诉 typescript 你的 mappedData类型为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()正如评论中指出的那样打电话。

关于javascript - TypeScript - 如何使用数组映射到 ES 6 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53492591/

相关文章:

swift - 在 Swift 中对字典进行排序

字典的python列表根据值查找重复项

javascript - 如何在 nodejs 的更新查询中将 DATE_SUB() 作为参数传递

javascript - 如何使用 Jquery 更改链接的 href 属性

angular - 是什么使得在 chrome 中调试 typescript 成为可能?

python - 如何最好地从 groovy 中的键列表/值列表中获取 map ?

Javascript - 一切都超出范围

Javascript 测试 : Inconsistent number of tests

javascript - 如何进行运行时转换

TypeScript 泛型在 Curried 时不适用于以前的函数,如何?