为什么我在 setUsdtBalance(balance) 中遇到错误?

问题描述 投票:0回答:1

我是使用 React 的打字稿新手,我对这段代码有问题@ setUsdtBalance(balance);谁能帮助我🙏

import React, { useState, useEffect } from 'react';
import Web3 from 'web3';

const web3 = new Web3('https://mainnet.infura.io/v3/759e4fcbf9b7449f854586fb65f43184');

function App() {
  const [lastBlockNumber, setLastBlockNumber] = useState<bigint | null>(null);
  const [usdtBalance, setUsdtBalance] = useState<string | null>(null);
  const [address, setAddress] = useState<string>('');

  useEffect(() => {
    const fetchLastBlockNumber = async () => {
      const blockNumber = await web3.eth.getBlockNumber();
      setLastBlockNumber(blockNumber);
    };

    fetchLastBlockNumber();
  }, []);

  const handleAddressChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    setAddress(e.target.value);
  };

  const handleGetBalance = async () => {
    if (!address) return;

    const contractABI = [
      {
        "constant": true,
        "inputs": [{ "name": "_owner", "type": "address" }],
        "name": "balanceOf",
        "outputs": [{ "name": "balance", "type": "uint256" }],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
      }
    ];

    const contractAddress = '0xdAC17F958D2ee523a2206206994597C13D831ec7';
    const usdtContract = new web3.eth.Contract(contractABI, contractAddress);
    const balance = await usdtContract.methods.balanceOf(address).call();
    setUsdtBalance(balance);
  };

任何人都可以帮助我,我不明白出了什么问题! 这是错误:

'void | 类型的参数[]| (unknown[] & [])' 不可分配给“SetStateAction”类型的参数。 类型“void”不可分配给类型“SetStateAction”.ts(2345)

reactjs typescript ethereum web3js ts-jest
1个回答
0
投票

call
是需要单个泛型参数的泛型函数。如果没有为
call
提供类型 arg,则默认为
void | [] | (unknown[] & [])

如果您确信

balance
只能是
string
,那么显式向
call
提供字符串应该足以消除这些错误

const balance = await usdtContract.methods.balanceOf(address).call<string>();
© www.soinside.com 2019 - 2024. All rights reserved.