如何在 TypeScript 中获取 JSON 文件上的 Object.keys 时设置类型?

Posted

技术标签:

【中文标题】如何在 TypeScript 中获取 JSON 文件上的 Object.keys 时设置类型?【英文标题】:How do you set types on getting Object.keys on JSON file in TypeScript? 【发布时间】:2021-04-03 16:18:21 【问题描述】:

我正在尝试从 JSON 文件中访问一个对象,但出现了错误:

Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '...'. ts(7053)

JSON 文件:

"networks": 
  "5777": 
    "event": ,
    "links": ,
    "address": "string",
    "transactionHash": "string"
  

5777 的值会不时更改。所以我试图访问该值,这给了我一个错误。

来自 TS 文件的片段:

import  abi, networks  from '../build/contracts/Example.json';
import Web3 from 'web3';
let networkId: any = Object.keys(networks)[0]; // 5777
new web3.eth.Contract(abi, networks[networkId].address); // causing error

【问题讨论】:

【参考方案1】:

你可以手动投射

let networkId = Object.keys(networks)[0] as keyof typeof networks; // 5777

【讨论】:

你能解释一下keyof在做什么吗?它是否从 JSON 文件中获取密钥并将类型转换为 networks 对象? 是的,你的问题。文档很好地解释了typescriptlang.org/docs/handbook/2/indexed-access-types.html

以上是关于如何在 TypeScript 中获取 JSON 文件上的 Object.keys 时设置类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 url 获取 json 数据并将其保存到 const 变量 [TypeScript]

如何从Typescript中以#或@开头的属性获取JSON数据

如何从 Typescript 中的 package.json 获取版本?

如何在 TypeScript 中获取 GraphQL 架构

在 TypeScript 中获取 JSON 数组的最后一个元素

深入typescript之如何高效地获取变量类型