Solo trato de hacer un gancho personalizado en reaccionar. todo funciona bien, pero ahora quiero agregar el tipo de retorno de mi respuesta para eso, he hecho que mi función de gancho sea una función de flecha genérica mecanografiada. Ahora, cuando trato de devolver este tipo genérico de mis ganchos, aparece un error dentro de mis ganchos.
Escriba '{ nombre: cadena; }' no se puede asignar al tipo 'T'. Se podría crear una instancia de 'T' con un tipo arbitrario que podría no estar relacionado con '{ nombre: cadena; }'.
manos
type httpRequest = { URL: string | undefined; Method: 'Get' | 'Post' | 'Put' | 'Delete'; RequestBody: any; }; type httpResponse<T> = { loading: boolean; data: T; error: any; }; const useHttpRequest = <T>(request: httpRequest): httpResponse<T> => { console.log(); return { loading: false, data: { name: 'Sabban' }, error: {} }; }; export default useHttpRequest;Componente
import React from 'react'; import useHttpRequest from '../hooks/use-http'; const Blog = () => { const httpRequest = useHttpRequest<{ name: string }>({ URL: '', Method: 'Get', RequestBody: {}, }); return ( <div className="container"> <div className="card"> <div className="card-body"> <h5 className="card-title">Card title</h5> <h6 className="card-subtitle mb-2 text-muted">Card subtitle</h6> <p className="card-text"> Some quick example text to build on the card title and make up the bulk of the card's content. </p> </div> </div> </div> ); }; export default Blog;Solo quiero devolver el tipo exacto que obtengo del componente.
Es porque el sistema de tipos no puede asegurar lo que será sustituido por T dentro de la frase de declarar.
En su ejemplo, los datos se vuelven a sintonizar como { name: 'Sabban' } lo cual no es seguro porque la función se puede llamar como useHttpRequest<{ fullname: string }> .
Parece que está creando un cliente Http, creo que está bien forzar { name: 'Sabban' } as unknown as T porque es imposible asegurar lo que se obtendrá de la respuesta externa.
O, si puede enumerar todas las API y todos los tipos de respuesta, puede definir un método para cada punto final. Que es como construir un cliente SDK. Ejemplo: patio de recreo