CodeAventura
TypeScript
▸Tipos avanzados▸Type guards personalizados

Misión

Editor
Consola
La consola está vacía. Pulsa EJECUTAR para correr tu código.
19 / 24Type guards personalizados
Anterior

Type guards personalizados

Cuando typeof y in no alcanzan

typeof funciona para primitivos. in funciona para verificar propiedades. Pero a veces necesitas verificaciones más complejas:

¿Cómo distingues un Perro de un Gato? Ambos tienen nombre. No tienen un discriminante como tipo. Necesitas un type guard personalizado.

Funciones type guard

Un type guard es una función que devuelve valor is Tipo:

La clave es el tipo de retorno: animal is Perro. Esto le dice a TypeScript: "si esta función devuelve true, el parámetro es de tipo Perro".

Usando type guards

Después de llamar al type guard, TypeScript refina el tipo:

Sin el type guard, TypeScript no sabría que animal.ladrar() existe después del if.

¿Por qué no usar in directamente?

Podrías usar "ladrar" in animal, y en muchos casos funciona. Pero los type guards personalizados son mejores cuando:

  1. La verificación es compleja: involucra múltiples propiedades
  2. Se reutiliza: la misma verificación en muchos lugares
  3. Quieres un nombre descriptivo: esAdmin(usuario) es más legible que "permisos" in usuario && usuario.permisos.includes("admin")

instanceof: type guard built-in

Si usas clases, instanceof funciona como type guard automáticamente:

Tu desafío 🚀

  1. Tienes interfaces Perro (con ladrar()) y Gato (con maullar())
  2. Crea type guards esPerro y esGato que devuelvan animal is Perro / animal is Gato
  3. Crea una función describirAnimal que use los type guards para mostrar info específica
  4. Prueba con diferentes animales

Los type guards personalizados son funciones que enseñan a TypeScript a distinguir tipos. Tú escribes la lógica, TypeScript refina los tipos.