0Pricing
TypeScript Academy · Lección

Reducción de tipos con instanceof e in

Reduzca los tipos de instancias de clases y estructuras de objetos.

Reducción de tipos con instanceof e in es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Bienvenido

`instanceof` estrecha las instancias de clases e `in` estrecha los tipos de objeto según la presencia de propiedades. Ambas son esenciales para trabajar con uniones complejas.

Estrechamiento con instanceof

Use `instanceof` para comprobar si un valor es una instancia de una clase. TypeScript estrecha el tipo a esa clase.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof con clases personalizadas

instanceof también funciona con sus propias clases.
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

instanceof no funciona con interfaces

Las interfaces se eliminan en tiempo de ejecución. No puede usar instanceof con una interfaz, solo con clases.

El operador in

Use `in` para comprobar si existe una propiedad en un objeto. TypeScript estrecha la unión a los miembros que tienen esa propiedad.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

Estrechamiento con in y propiedades opcionales

`in` también realiza el estrechamiento con propiedades opcionales: lo estrecha a los miembros de la unión en los que la propiedad PUEDE existir.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

Combinación de instanceof e in

Puede combinar ambas técnicas de estrechamiento para discriminar tipos complejos.
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

in para uniones discriminadas

Cuando los miembros de una unión no tienen un discriminante, las comprobaciones con `in` pueden cumplir la misma función de estrechamiento.
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof en bloques catch

Use instanceof en bloques catch para distinguir los tipos de error.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

Comprobación con Object.prototype frente a in

Tanto `key in obj` como `Object.prototype.hasOwnProperty.call(obj, key)` comprueban la existencia de una propiedad, pero `in` también coincide con las propiedades heredadas.

Prioridad del estrechamiento

Cuando se aplican varias comprobaciones de estrechamiento, TypeScript intersecta los tipos estrechados y obtiene el tipo más específico posible.

Comprobación rápida

¿Por qué no puede usar `instanceof` para estrechar un tipo de interfaz en TypeScript?

Resumen

`instanceof` estrecha las instancias de clases en tiempo de ejecución. `in` estrecha las uniones de objetos según la existencia de propiedades. Use ambas al trabajar con jerarquías de clases y uniones de objetos estructurales.

Preguntas frecuentes

¿La lección «Reducción de tipos con instanceof e in» es gratis?

Sí — el texto completo de «Reducción de tipos con instanceof e in» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Reducción de tipos con instanceof e in»?

Reduzca los tipos de instancias de clases y estructuras de objetos. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Reducción de tipos con instanceof e in»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Reducción de tipos con typeof y truthiness
  2. Reducción de tipos con instanceof e in
  3. Funciones de protección de tipos definidas por el usuario
  4. Comprobación de exhaustividad con never
← Volver a TypeScript Academy