首页 > 解决方案 > Typescript 与数组对象的映射关系

问题描述

根据MDN 文档

从这样的数组初始化 Map 是合法的:

let kvArray = [['key1', 'value1'], ['key2', 'value2']];
let myMap: Map<string, string> = new Map(kvArray);

尽管如此,我的 Visual Studio Code 编译器还是抱怨:

No overload matches this call.
Overload 1 of 3, '(iterable: Iterable<readonly [string, string]>): Map<string, string>', gave the following error.
Argument of type 'string[][]' is not assignable to parameter of type 'Iterable<readonly [string, string]>'.
The types returned by '[Symbol.iterator]().next(...)' are incompatible between these types.

标签: arraystypescriptdictionary

解决方案


问题是您没有在 上放置类型kvArray,因此打字稿正在推断它。它推断它是一个string[][],但这还不够具体。Map 构造函数需要恰好包含两个字符串的元组,而不是包含任意数量字符串的数组。您的 javascript 正在创建这些元组,但您需要明确说明类型:

let kvArray: [string, string][] = [['key1', 'value1'], ['key2', 'value2']];

推荐阅读