Tengo esta interfaz mecanografiada, que funciona como una estructura común para las llamadas a la API en mi aplicación de reacción.
export interface ICommonApiState { loading: boolean; data: any; serverError: string; }Como puede ver, el tipo de datos es cualquiera, pero quiero que ese tipo sea dinámico, porque voy a usar esta misma interfaz en varios lugares, pero no quiero crear una nueva interfaz cada vez que la uso. Entonces, ¿cómo puedo pasar un tipo a datos dependiendo de lo que necesito?
Por ejemplo, si estoy haciendo una llamada API a este servidor que me dará una serie de nombres de usuario, ¿cómo puedo pasar ese tipo a datos usando la misma interfaz? Me gusta..
const [userNames, setUserNames] = useState<ICommonApiState<IUserNames>>( { loading: false, serverError: '', data: [] -> **This receives inferred types from IUserNames** } )Una solución es hacerlo genérico como a continuación:
export interface ICommonApiState<T> { loading: boolean; data: T; serverError: string; }De esa manera, está controlando lo que se infiere en los componentes individuales que está utilizando.
Ya tiene ese uso de ejemplo en su código: ICommonApiState<IUserNames>