更新 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' 类型,因为类型的表达式不能用于索引类型”的错误的主要内容,如果未能解决你的问题,请参考以下文章
es6 类函数中的 this[functionName] 导致“元素隐式具有 'any' 类型,因为字符串类型的表达式不能用于索引”