Я пытаюсь получить доступ к объекту из файла 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
Вы можете разыграть его вручную
let networkId = Object.keys(networks)[0] as keyof typeof networks; // 5777
Да, на ваш вопрос. И документ хорошо это объясняет typescriptlang.org/docs/handbook/2/indexed-access-types.html
Во-первых, я проголосовал за ответ @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);
Надеюсь, это поможет многим.
Не могли бы вы объяснить мне, что делает
keyof
? Это получение ключей из файла JSON и приведение типа к объектуnetworks
?