Element implicitly has an ‘any‘ type because expression of type ‘any‘ can‘t be used to index type 报错

博客讲述了在TypeScript中遇到的'Element implicitly has an 'any' type because expression of type 'any' can't be used to index type'错误。问题源于TypeScript对象类型的开放性和可扩展性,这允许添加额外属性但可能导致不安全的键索引操作。编译器无法确保for...in循环中的键只包含已知属性,因此产生警告。官方讨论和解决方案链接给出,包括引入确切类型的特性请求。
摘要由CSDN通过智能技术生成

Typescript

let obj = { a: "hey", b: "you", c: "guys" };

for (const k in obj) {
  console.log(obj[k].toUpperCase()); // error!
  /* Element implicitly has an 'any' type because expression of type 
  'string' can't be used to index type '{ a: string; b: string; c: string; }'. */
}

这里的问题是 TypeScript 中的对象类型是开放的或可扩展的,而不是封闭的或精确的。您可以在 TypeScript 中为对象添加额外的属性,而不会违反其类型。这在某些情况下非常有用:它允许您通过添加属性来扩展接口和子类。但在其他情况下,这是一种痛苦:

编译器将 obj 视为 {a: string, b: string, c: string} 类型的值。由于这种类型并不精确,当你执行 for (const k in obj) 时,编译器知道 k 将采用值“a”、“b”和“c”,但它不知道这些是唯一可能的值:

让 hmm = { a: "hey", b: "you", c: "guys", d: 12345 };
object= hmm ; // no error!

因为值 hmm 匹配 {a: string, b: string, c: string}。 d 属性不违反类型。因此,对于所有编译器都知道的,for (const k in obj) 将枚举“a”、“b”、“c”,谁知道还有哪些其

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值