首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Object.keys迭代导致Typescript错误“元素隐式具有'any‘类型,因为索引表达式不是’number‘类型”

Object.keys迭代导致Typescript错误“元素隐式具有'any‘类型,因为索引表达式不是’number‘类型”
EN

Stack Overflow用户
提问于 2020-12-21 02:06:03
回答 1查看 581关注 0票数 1

我正在尝试显示返回对象的API调用的结果。为了执行.map,我使用了Object.keys,这样它就可以显示结果。

我正在学习打字的新手,并尝试在一个个人项目中练习,但我被这个问题难住了。

我正在进行一个API调用,然后返回一个对象。为了打印值,我使用Object.keys来映射这些值。

代码语言:javascript
代码运行次数:0
运行
复制
rates: Object
EUR: 0.8157272208
AUD: 1.3138918346
BRL: 5.1119993474
GBP: 0.7409087201
base: "USD"
date: "2020-12-18"

这是我的codesandbox (如果我切换到.ts文件,整个代码就会爆炸) https://codesandbox.io/s/challenge-7-fetch-a-list-final-forked-7wtwu?file=/src/index.js

代码语言:javascript
代码运行次数:0
运行
复制
TypeScript error in /Users/username/gitrepos/crypto-convert/src/App.tsx(60,39):
Element implicitly has an 'any' type because index expression is not of type 'number'.  TS7015

    58 |               Object.keys(cryptos).map((crypto, index) => (
    59 |                 <li key={index}>
  > 60 |                   {crypto} : {cryptos[crypto]}
       |                                        ^
    61 |                 </li>

网上有一些时髦的解决方案和绕过错误的方法,但我不想做任何老生常谈的事情,因为重点是了解更多关于TS的知识。有人能帮我找出我哪里做错了吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 02:21:21

Object.keys的类型错误,返回的是string[]而不是参数的键。因此,不能保证cryptocryptos的关键字。避免这种情况的一种方法是将Object.keys

代码语言:javascript
代码运行次数:0
运行
复制
(Object.keys(cryptos) as keyof typeof cryptos).map(...)

或者,只使用Object.entries来遍历键和值:

代码语言:javascript
代码运行次数:0
运行
复制
Object.entries(cryptos).map(([key, value], index) => (
    <li key={index}>
        {key}: {value}
    </li>
)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65383113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档