Javascript Object.keys迭代导致Typescript错误“;元素隐式地具有一个';任何';类型,因为索引表达式不是类型';编号'&引用;

Javascript Object.keys迭代导致Typescript错误“;元素隐式地具有一个';任何';类型,因为索引表达式不是类型';编号'&引用;,javascript,typescript,object,key,codesandbox,Javascript,Typescript,Object,Key,Codesandbox,我试图显示返回对象的API调用的结果。为了制作.map,我使用了Object.keys,以便它显示结果 我正在学习打字脚本,并尝试在个人项目中练习,但我被这个问题难住了 我正在进行API调用并获取一个对象。为了打印这些值,我使用Object.keys映射这些值 rates: Object EUR: 0.8157272208 AUD: 1.3138918346 BRL: 5.1119993474 GBP: 0.7409087201 base: "USD" date: "

我试图显示返回对象的API调用的结果。为了制作.map,我使用了
Object.keys
,以便它显示结果

我正在学习打字脚本,并尝试在个人项目中练习,但我被这个问题难住了

我正在进行API调用并获取一个对象。为了打印这些值,我使用Object.keys映射这些值

rates: Object
EUR: 0.8157272208
AUD: 1.3138918346
BRL: 5.1119993474
GBP: 0.7409087201
base: "USD"
date: "2020-12-18"
这是我的codesandbox(如果我切换到.ts文件,整个事情都会爆炸)

/Users/username/gitrepos/crypto convert/src/App.tsx(60,39)中的类型脚本错误: 元素隐式具有“any”类型,因为索引表达式不是“number”类型。TS7015 58 | Object.keys(cryptos).map((crypto,index)=>( 59 |
  • >60{crypto}:{cryptos[crypto]} | ^ 61 |

  • 在线上有一些时髦的解决方案和绕过错误的方法,但我不想做任何黑客行为,因为重点是了解更多关于TS的信息。有人能帮我找出我在这里做错了什么吗?谢谢!

    Object.keys
    键入错误并返回
    字符串[]
    而不是参数的密钥。因此,
    crypto
    不能确保是
    cryptos
    的密钥。一种规避此问题的方法是强制转换
    对象。密钥

    (Object.keys(cryptos) as keyof typeof cryptos).map(...)
    
    或者,仅使用
    Object.entries
    迭代键和值:

    Object.entries(cryptos).map(([key, value], index) => (
        <li key={index}>
            {key}: {value}
        </li>
    )
    
    Object.entries(cryptos.map)([key,value],index)=>(
    
  • {key}:{value}
  • )
    谢谢您的解释!
    Object.entries(cryptos).map(([key, value], index) => (
        <li key={index}>
            {key}: {value}
        </li>
    )