我正在React中遇到错误:
'Window & typeof globalThis'类型上不存在属性“ethereum”
这是导致问题的代码行:
import { ethers } from 'ethers'
const provider = new ethers.providers.Web3Provider(window.ethereum);
有任何想法是怎么回事吗?
我正在React中遇到错误:
'Window & typeof globalThis'类型上不存在属性“ethereum”
这是导致问题的代码行:
import { ethers } from 'ethers'
const provider = new ethers.providers.Web3Provider(window.ethereum);
有任何想法是怎么回事吗?
any
作为类型是作弊的。使用"any"只会消除错误,但不会显示可用的属性。import { MetaMaskInpageProvider } from "@metamask/providers";
declare global {
interface Window{
ethereum?:MetaMaskInpageProvider
}
}
在src
文件夹中创建 react-app-env.d.ts
文件,并添加以下脚本:
/// <reference types="react-scripts" />
interface Window {
ethereum: any
}
vite-env.d.ts
文件。 - DengSihan在我的 src/react-app-env.d.ts 文件中,我正在使用
/// <reference types="react-scripts" />
import { ExternalProvider } from "@ethersproject/providers";
declare global {
interface Window {
ethereum?: ExternalProvider;
}
}
注意@ethersproject/providers
是ethers
依赖项,因此无需安装。
然后我还添加了一个src/hooks/useMetaMask.ts文件,其中包含useMetaMask
hook,将提供者强制转换为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;
};
src/vite-env.d.ts
并添加以下内容(注意第一行的装饰器):///
import { ExternalProvider } from "@ethersproject/providers";
declare global {
interface Window {
ethereum?: ExternalProvider;
}
}
- Abhik Banerjeeethers
才能使其正常工作! - Abhik Banerjeeweb3.d.ts
的文件,其中包含以下代码:import { MetaMaskInpageProvider } from "@metamask/providers";
declare global {
interface Window {
ethereum?: MetaMaskInpageProvider;
}
}
tsconfig.json
文件在 include
中包含了上述文件。