0Pricing
TypeScript Academy · Lección

Reducción de errores capturados (unknown frente a Error)

Gestione de forma segura los errores capturados tipados como unknown.

Reducción de errores capturados (unknown frente a Error) es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 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.

Bienvenida

Desde TypeScript 4.0, los errores capturados tienen el tipo unknown. Esto obliga a realizar un estrechamiento explícito antes de usar sus propiedades.

Cambio de TS 4.0

TypeScript 4.0 introdujo useUnknownInCatchVariables. En el modo estricto, los errores capturados tienen el tipo unknown.
// err is now: unknown
try { doSomething(); }
catch (err) {
  // err.message; // Error — cannot access on unknown
}

Estrechamiento con instanceof

Use instanceof Error para acceder de forma segura a las propiedades del error.
catch (err) {
  if (err instanceof Error) {
    console.error(err.message, err.stack);
  } else {
    console.error('Unknown error:', String(err));
  }
}

Guardia de tipos isError

Cree una guardia de tipos reutilizable para estrechar el tipo del error.
function isError(e: unknown): e is Error {
  return e instanceof Error;
}
catch (e) {
  if (isError(e)) console.error(e.message);
}

Estrechamiento de errores personalizados

Estreche el tipo a errores personalizados dentro de los bloques catch.
catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else if (err instanceof Error) { /* generic */ }
  else throw err;
}

useUnknownInCatchVariables

Esta opción, incluida en strict a partir de TS 4.4, exige que los errores capturados tengan el tipo unknown.
{ "compilerOptions": { "useUnknownInCatchVariables": true } }

Errores de tipo string

Algunos códigos lanzan strings en lugar de objetos Error. Gestione ambos casos.
catch (err) {
  const message = err instanceof Error ? err.message : String(err);
  console.error(message);
}

Función auxiliar typed throw

Cree una función auxiliar que siempre lance un Error con tipo.
function throwErr(msg: string, code = 500): never {
  const e: AppError = Object.assign(new Error(msg), { statusCode: code });
  throw e;
}

Volver a lanzar errores unknown

Vuelva a lanzar los errores que no pueda gestionar.
catch (err) {
  if (err instanceof KnownError) handle(err);
  else throw err; // propagate unknowns
}

Límites de error en React

Los límites de error de React deben gestionar errores unknown procedentes de los métodos del ciclo de vida.
componentDidCatch(error: unknown, info: ErrorInfo) {
  if (error instanceof Error) logError(error.message);
}

Pruebas de errores capturados

Pruebe la gestión de errores con aserciones tipadas.
test('catches errors', async () => {
  jest.spyOn(api, 'fetch').mockRejectedValue(new NetworkError());
  const result = await safeRun();
  expect(result.ok).toBe(false);
});

Comprobación rápida

¿Cuál es el tipo de un error capturado `err` en el modo estricto de TypeScript 4.4 o posterior?

Recapitulación

Estrechamiento de errores capturados (unknown frente a Error): ha aprendido los conceptos clave de este tema y cómo aplicarlos en proyectos reales de TypeScript.

Preguntas frecuentes

¿La lección «Reducción de errores capturados (unknown frente a Error)» es gratis?

Sí — el texto completo de «Reducción de errores capturados (unknown frente a Error)» 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 errores capturados (unknown frente a Error)»?

Gestione de forma segura los errores capturados tipados como unknown. 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 3 de 4.

¿Cuánto tiempo toma la lección «Reducción de errores capturados (unknown frente a Error)»?

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. Clases y jerarquías de errores tipadas
  2. El patrón Result: Ok y Err
  3. Reducción de errores capturados (unknown frente a Error)
  4. Gestión de errores en código TypeScript asíncrono
← Volver a TypeScript Academy