arrays - 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.
解决方案
问题是您没有在 上放置类型kvArray
,因此打字稿正在推断它。它推断它是一个string[][]
,但这还不够具体。Map 构造函数需要恰好包含两个字符串的元组,而不是包含任意数量字符串的数组。您的 javascript 正在创建这些元组,但您需要明确说明类型:
let kvArray: [string, string][] = [['key1', 'value1'], ['key2', 'value2']];
推荐阅读
- intellij-idea - WebStorm:锁定/解锁文件和文件夹
- angular - MockBackend 和 HttpTestingController 有什么区别?
- angular - 更新 redux 状态的项目导致无限循环/浏览器锁定
- c# - 如何使用 iText for .NET 创建表格
- android - 可使用尖端的 android 绘制
- reactjs - this.props的key是什么意思
- c# - System.Diagnostics.Tracing.EventSource.IsEnabled 是如何工作的?
- java - 由于自定义 ArrayAdapter 类中的 NullPointerException,应用程序崩溃
- python - For循环中的Python列表索引超出范围
- token - Keycloak - 限制对令牌端点的访问