Desata el verdadero poder de TypeScript: tipado avanzado que cambia el juego
Utiliza tipos condicionales para un tipado más flexible y poderoso.
Cuando el tipado en TypeScript se siente rígido y limitante, es hora de sacar los tipos condicionales del arsenal.
El truco
Antes:
type Usuario = {
nombre: string;
edad: number;
};
function obtenerDatoClave(usuario: Usuario, clave: 'nombre' | 'edad'): string | number {
if (clave === 'nombre') {
return usuario.nombre;
}
return usuario.edad;
}
Después:
type Usuario = {
nombre: string;
edad: number;
};
type TipoDatoClave<T, K extends keyof T> = K extends 'nombre' ? string : number;
function obtenerDatoClave<T, K extends keyof T>(usuario: T, clave: K): TipoDatoClave<T, K> {
return usuario[clave] as TipoDatoClave<T, K>;
}
Utiliza tipos condicionales para hacer que la función obtenerDatoClave devuelva el tipo correcto basado en la clave proporcionada. TipoDatoClave es el tipo condicional que evalúa nombre para devolver string, y cualquier otra clave para devolver number. Esto elimina la necesidad de manualmente manejar cada posible clave dentro de la función, ya que TypeScript infiere el tipo correcto.
El poder de TypeScript se multiplica cuando permites que sus herramientas de inferencia hagan el trabajo pesado.