Sobes.tech
Middle

¿Alguna vez has tenido que usar uniones discriminantes y type guards? ¿Qué type guards integrados conoces?

sobes.tech AI

Respuesta de la IA

Los uniones discriminadas (discriminated unions) y las verificaciones de tipo (type guards) son herramientas poderosas de TypeScript para trabajar con uniones de tipos, permitiendo determinar de manera segura un tipo específico dentro de la unión.

Uniones discriminadas son uniones de tipos donde cada tipo tiene una clave literal común (por ejemplo, el campo type), por la cual se puede identificar de manera inequívoca un tipo específico.

Verificaciones de tipo (type guards) son funciones o construcciones que verifican el tipo de una variable en tiempo de ejecución y reducen el tipo para el compilador.

Las verificaciones de tipo integradas en TypeScript:

  • typeof — para tipos primitivos (string, number, boolean)
  • instanceof — para verificar la pertenencia a una clase
  • in — para verificar la existencia de una propiedad en un objeto

Ejemplo de una unión discriminada y una verificación de tipo:

interface Cuadrado {
  kind: 'square';
  size: number;
}

interface Círculo {
  kind: 'circle';
  radius: number;
}

type Forma = Cuadrado | Círculo;

function área(forma: Forma): number {
  switch (forma.kind) {
    case 'square':
      return forma.size * forma.size;
    case 'circle':
      return Math.PI * forma.radius ** 2;
  }
}

Aquí, kind es el discriminador, y switch actúa como una verificación de tipo.

Uso de verificaciones de tipo integradas:

function esString(valor: unknown): valor es string {
  return typeof valor === 'string';
}

if (esString(algo)) {
  // aquí, algo es de tipo string
}