A veces necesitas un tipo que dependa de otro, pero sin el lío de crear mil interfaces o tipos diferentes.

El truco

// ANTES
type User = { name: string; age: number };
type Admin = { name: string; age: number; role: string };
type UserOrAdmin = User | Admin;

// DESPUÉS
type ConditionalType<T> = T extends { role: string } ? Admin : User;

const user: ConditionalType<{ role: string }> = { name: "John", age: 30, role: "admin" };
const anotherUser: ConditionalType<{}> = { name: "Jane", age: 28 };

Los tipos condicionales te permiten definir tipos basados en condiciones. Aquí, ConditionalType evalúa si el tipo T tiene una propiedad role. Si la tiene, se asigna el tipo Admin; si no, el tipo User. Esta flexibilidad te evita definiciones redundantes y te ofrece un tipo más adaptable y preciso.

Con tipos condicionales, simplificas tu código y lo haces más robusto, sin sacrificar claridad ni control.