Introducción
Los conditional types permiten lógica a nivel de tipos: T extends U ? X : Y. Esto permite resolución de tipos dinámica y consciente del contexto.
Sintaxis básica
type IsString<T> = T extends string ? true : false; La condición pregunta: “¿Es T asignable a U?”
La palabra clave infer
Extrae un tipo desde dentro de una condición: type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
Conditional types distributivos
Cuando se usan con uniones, se distribuyen sobre cada miembro. Para evitar distribución, envuelve ambos lados: [T] extends [any].
Patrones del mundo real
Tipos de retorno condicionales basados en entrada, sobrecarga de funciones sin overloads, DeepReadonly recursivo.
Los conditional types son el if/else del sistema de tipos. Combinados con infer, distribución y mapped types, habilitan transformaciones sofisticadas.

