typescript “Property 'ethereum' does not exist on type 'Window & typeof globalThis'”在React中的错误

uhry853o  于 2023-06-24  发布在  TypeScript
关注(0)|答案(3)|浏览(744)

我得到了
属性'ethereum'在类型'Window & typeof globalThis'上不存在
React中的错误这是生成问题的行:

import { ethers } from 'ethers'

const provider = new ethers.providers.Web3Provider(window.ethereum);

知道会发生什么吗

bwleehnv

bwleehnv1#

使用以下脚本在src文件夹中创建react-app-env.d.ts文件:

/// <reference types="react-scripts" />

interface Window {
    ethereum: any
}
ckocjqey

ckocjqey2#

使用any作为类型是作弊。使用“any”只会删 debugging 误,但它不会显示可用的属性。

import { MetaMaskInpageProvider } from "@metamask/providers";

declare global {
  interface Window{
    ethereum?:MetaMaskInpageProvider
  }
}
tkclm6bt

tkclm6bt3#

在我的 src/react-app-env.d.ts 中,我使用

/// <reference types="react-scripts" />
import { ExternalProvider } from "@ethersproject/providers";

declare global {
  interface Window {
    ethereum?: ExternalProvider;
  }
}

请注意,@ethersproject/providersethers依赖项,所以不需要安装它。
然后,我还添加了一个 src/hooks/useMetaMask.ts 文件,带有useMetaMask钩子,它将提供程序强制转换为MetaMask提供程序类型。如果您需要添加MetaMask侦听器,这将非常有用。

import type { MetaMaskInpageProvider } from "@metamask/providers";

export const useMetaMask = () => {
  const ethereum = global?.window?.ethereum;
  if (!ethereum || !ethereum.isMetaMask) return;
  return ethereum as unknown as MetaMaskInpageProvider;
};

相关问题