Как вы устанавливаете типы при получении Object.keys в файле JSON в TypeScript?

Я пытаюсь получить доступ к объекту из файла 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
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
1 815
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете разыграть его вручную

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

Не могли бы вы объяснить мне, что делает keyof? Это получение ключей из файла JSON и приведение типа к объекту networks?

IntFooBar 25.12.2020 23:17

Да, на ваш вопрос. И документ хорошо это объясняет typescriptlang.org/docs/handbook/2/indexed-access-types.html

ABOS 25.12.2020 23:58

Во-первых, я проголосовал за ответ @ABOS, а в улучшении и в качестве подробного упомянул следующий исходный код для создания contract data с использованием abi

import Web3 from 'web3'
import ElectionCommission, { networks as ecNetworks} from "./truffle_abis/ElectionCommission.json";

let networkId = Object.keys(ecNetworks)[0] as keyof typeof ecNetworks;
let ecCommissionData = new web3.eth.Contract(ElectionCommission.abi as any, ecNetworks[networkId].address);

Надеюсь, это поможет многим.

Другие вопросы по теме