estoy ejecutando la siguiente funcion
import { ethers } from "ethers"; async function requestAccount() { await window.ethereum.request({ method: "eth_requestAccounts" }); }El problema que tengo es que estoy usando mecanografiado y se queja con el siguiente error
Property 'ethereum' does not exist on type 'Window & typeof globalThis'
Entonces pude arreglarlo con lo siguiente
declare global { interface Window{ ethereum?:any } }Sin embargo, no creo que esto se esté aprovechando correctamente de mecanografiado. ¿Cómo lo escribiría para que el valor de la interfaz sea correcto? Supongo que debería ser un objeto con un método dentro, pero no estoy seguro de cómo escribirlo en mecanografiado.
Cualquier ayuda sería muy apreciada.
Gracias
Esta es una pregunta bastante antigua, pero si usted u otra persona todavía está buscando una respuesta, puede usar el tipo de ethers ExternalProvider .
interface Window { ethereum?: import('ethers').providers.ExternalProvider; } Aquí está la versión extraída de ExternalProvider si no está usando éteres
type ExternalProvider = { isMetaMask?: boolean; isStatus?: boolean; host?: string; path?: string; sendAsync?: (request: { method: string, params?: Array<any> }, callback: (error: any, response: any) => void) => void send?: (request: { method: string, params?: Array<any> }, callback: (error: any, response: any) => void) => void request?: (request: { method: string, params?: Array<any> }) => Promise<any> }Resolví el error de tipo temporalmente por:
declare let window: any en el nivel superior después de sus importaciones. Ahora puede llamar a window.ethereum con la advertencia y el error de tipo desactivados. Creo que esto anula el objeto de la ventana global con un tipo any . Estoy seguro de que esta no es la mejor manera de solucionarlo, es una especie de truco, pero corrige el error de tipo mientras tanto. Déjame saber si esto funcionó para tu caso.
npm i @metamask/providersInstale el paquete anterior:
import { MetaMaskInpageProvider } from "@metamask/providers"; declare global { interface Window{ ethereum?:MetaMaskInpageProvider } }después
const accounts = (await ethereum?.request({ method: "eth_requestAccounts", })) as string[];