es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de tipo al pasar web3provider como una propiedad con TypeScript.

Estoy intentando pasar un proveedor Web3Provider como una prop a un hook junto con otros, y siempre obtengo un error.

Aquí está el código de cómo obtengo el proveedor:

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

Luego, dentro del bloque return, tengo:

<form provider="{provider}"></form>

Y en el hook:

export const Form = (provider: ethers.providers.Web3Provider) => {

Los tipos deberían ser los mismos, pero siempre obtengo el error:

(Atributo JSX) Web3Provider.provider:
ethers.providers.ExternalProvider

El tipo ‘Web3Provider’ no se puede asignar al tipo ‘ExternalProvider’.
Los tipos de propiedad ‘send’ son incompatibles. El tipo ‘(method: string, params: any[]) => Promise’ no se puede asignar al tipo ‘(request: { method: string; params?: any[] | undefined; }, callback: (error: any, response: any) => void) => void’. Los tipos de parámetros ‘method’ y ‘request’ son incompatibles. El tipo ‘{ method: string; params?: any[] | undefined; }’ no se puede asignar al tipo ‘string’.

He intentado hacer una conversión a ‘any’ en el formulario, pero luego obtengo un error al llamar a un método que puedo llamar fuera de él.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber una incompatibilidad de tipos entre el provider pasado al componente Form y el tipo esperado en el hook. El mensaje de error indica que Web3Provider no se puede asignar al tipo ExternalProvider. Verifica que ethers.providers.Web3Provider y la propiedad provider en el componente Form tengan los mismos tipos.

    Si la conversión a any no funcionó, intenta importar los tipos Web3Provider y ExternalProvider y establecer explícitamente el tipo del provider en la propiedad del componente Form al tipo correcto.

    Por ejemplo:

    import { Web3Provider, ExternalProvider } from 'ethers/providers';
    
    // ...
    
    const provider: Web3Provider = new ethers.providers.Web3Provider(window.ethereum);
    
    // ...
    
    type FormProps = {
      provider: ExternalProvider;
    }
    
    export const Form = ({ provider }: FormProps) => { 
      // ...
    }
    

    De esta manera, puedes asegurarte de que el provider pasado al hook tenga el tipo correcto y cualquier error relacionado con la incompatibilidad de tipos se resolverá.

Comments are closed.