更新 Map 的值时,“元素隐式具有 'any' 类型,因为类型的表达式不能用于索引类型”的错误

Posted

技术标签:

【中文标题】更新 Map 的值时,“元素隐式具有 \'any\' 类型,因为类型的表达式不能用于索引类型”的错误【英文标题】:Error of "Element implicitly has an 'any' type because expression of type can't be used to index type" when when updating value of Map更新 Map 的值时,“元素隐式具有 'any' 类型,因为类型的表达式不能用于索引类型”的错误 【发布时间】:2020-09-13 21:00:21 【问题描述】:

这个sn-p想给一个key为string、value为number的字典赋值。

let dict: Map<string, number> = new Map<string, number>();
dict["one"] = 1;

元素隐式具有“any”类型,因为“one”类型的表达式不能用于索引类型“Map”。 “地图”类型上不存在属性“一”。Vetur(7053)

这个错误是什么意思?我们如何解决它?

【问题讨论】:

【参考方案1】:

虽然 Map 实例是一个对象,但将其用作数据结构的正确方法是调用 .set.get 来设置和获取值:

dict.set('one', 1);

console.log(dict.get('one'));

地图不应该像您正在做的那样在实例上具有任意键值对,因此会出现 TS 错误。

此外,TS 可以从右侧的表达式中很好地推断 Map 的类型 - 无需显式注释。此外,除非您计划重新分配地图(这通常是一件很奇怪的事情),否则应该使用const 声明它:

const dict = new Map<string, number>();

【讨论】:

以上是关于更新 Map 的值时,“元素隐式具有 'any' 类型,因为类型的表达式不能用于索引类型”的错误的主要内容,如果未能解决你的问题,请参考以下文章

元素隐式具有'any'类型,因为类型的表达式

es6 类函数中的 this[functionName] 导致“元素隐式具有 'any' 类型,因为字符串类型的表达式不能用于索引”

如何为映射类型添加索引签名?

golang 从 map 获取值时的值拷贝问题

MySQL 触发器用于在更新当前表中的值时更新另一个表

当用户更改下拉过滤器中的值时,Django过滤更新查询