Errores Personalizados (extends Error)
Aprende a crear tus propios tipos de errores extendiendo la clase Error para manejo de excepciones más específico y efectivo.
TL;DR - Resumen rápido
- Extiende la clase Error para crear tipos de errores personalizados
- Siempre llama super() en el constructor para mantener el prototipo
- Establece this.name para identificar el tipo de error
- Usa instanceof para capturar errores específicos
- Agrega propiedades personalizadas para contexto adicional
Introducción a Errores Personalizados
Los errores personalizados te permiten crear tipos de errores específicos para tu aplicación extendiendo la clase Error. Esto es especialmente útil cuando necesitas manejar diferentes categorías de errores de forma específica, como errores de validación, errores de API, errores de base de datos, etc.
Al extender Error, tu clase personalizada hereda todas las propiedades y métodos del objeto Error estándar, incluyendoname, message y stack. Esto significa que puedes usar instanceof para diferenciar tus errores personalizados de otros tipos de errores.
- <strong>Herencia de Error</strong>: Todas las propiedades estándar disponibles
- <strong>Identificación con name</strong>: Establece un nombre único
- <strong>instanceof</strong>: Diferencia tipos de errores específicamente
- <strong>Propiedades personalizadas</strong>: Agrega contexto adicional
- <strong>Stack trace automático</strong>: Traza de llamadas generada
Siempre llama super() en el constructor
Es crítico llamar super(mensaje) en el constructor de tu clase personalizada. Si no lo haces, el prototipo de Errorno se establece correctamente, lo que puede causar problemas coninstanceof y otras funcionalidades.
Crear Errores Personalizados
Para crear un error personalizado, defines una clase que extiendeError y usas super() para llamar al constructor de la clase padre. En el constructor puedes establecer propiedades personalizadas como this.name para identificar el tipo de error.
Este ejemplo muestra cómo crear diferentes tipos de errores personalizados:ValidationError para errores de validación, APIErrorpara errores de API con código de estado, DatabaseError con código de error, AuthenticationError con información de usuario y timestamp, yPaymentError con causa del error original.
Establece this.name para identificar el tipo
Siempre establece this.name en el constructor de tu clase personalizada. Esto te permite usar instanceof para diferenciar tus errores específicos de otros tipos de errores, haciendo que el manejo de errores sea más preciso y efectivo.
Validación con Errores Personalizados
Los errores personalizados son especialmente útiles para validación de datos. Puedes crear errores específicos para diferentes tipos de validación y lanzarlos cuando los datos no cumplen los requisitos esperados.
Este ejemplo muestra cómo usar errores personalizados para validación: validación de email con múltiples reglas, validación de edad con rangos, validación completa de usuario con múltiples campos, validación con reglas reutilizables y validación con valores por defecto cuando la validación falla.
- <strong>ValidationError</strong>: Errores de validación de datos
- <strong>Reglas reutilizables</strong>: Validadores que pueden aplicarse a múltiples campos
- <strong>Valores por defecto</strong>: Usar valores seguros cuando la validación falla
- <strong>Mensajes específicos</strong>: Indicar exactamente qué falló
instanceof y Captura
El operador instanceof te permite verificar si un error es de un tipo específico. Esto es especialmente útil cuando tienes múltiples tipos de errores personalizados y necesitas manejar cada uno de forma diferente.
Este ejemplo muestra cómo usar instanceof para capturar errores específicos. Puedes capturar ValidationError, APIError,DatabaseError y AuthenticationError de forma específica, proporcionando mensajes de error y soluciones personalizadas para cada tipo.
Usa instanceof para manejo específico
instanceof es la forma más robusta de diferenciar tipos de errores. En lugar de verificar el mensaje del error (que puede cambiar), verifica el tipo de error con instanceof y maneja cada caso de forma específica y apropiada.
Errores Comunes
Al crear errores personalizados, hay varios errores comunes que los desarrolladores cometen. Estos errores pueden hacer que el manejo de errores sea inefectivo, que debugging sea más difícil o que se pierda información importante.
Este ejemplo muestra los errores más frecuentes: no llamar super()en el constructor, no establecer this.name, usar Errorgenérico cuando existe uno personalizado, no usar instanceof para capturar errores específicos, no manejar errores personalizados de forma específica, no incluir información de contexto y lanzar errores sin validar antes.
Siempre llama super() primero
Siempre llama super(mensaje) antes de agregar cualquier propiedad personalizada. Las propiedades que agregas después de llamarsuper() estarán disponibles en el objeto de error, pero el orden correcto es llamar super() primero para asegurar que el prototipo se establece correctamente.
Patrones Útiles
Hay varios patrones comunes que utilizan errores personalizados para crear código más robusto y fácil de depurar. Estos patrones incluyen errores con códigos, errores con información de usuario, errores de API, errores con múltiples validaciones y errores con causa para encadenar errores originales.
Este ejemplo muestra patrones prácticos: errores con códigos de error, errores con información de usuario y acción, errores de API con endpoint y método, errores con múltiples validaciones, y errores con causa usando la propiedadcause para encadenar el error original.
- <strong>Error con código</strong>: Identificación única del error
- <strong>Error de usuario</strong>: Información de usuario y acción
- <strong>Error de API</strong>: Status code, endpoint y método
- <strong>Error con múltiples validaciones</strong>: Agrupa todos los errores
Resumen: Errores Personalizados
Conceptos principales:
- •Extiende la clase Error para crear tipos de errores personalizados
- •Siempre llama super() en el constructor para mantener el prototipo
- •Establece this.name para identificar el tipo de error
- •Usa instanceof para capturar errores específicos
- •Agrega propiedades personalizadas para contexto adicional
Mejores prácticas:
- •Siempre llama super(mensaje) antes de agregar propiedades
- •Establece this.name para identificar el tipo de error
- •Usa instanceof para manejar errores específicos
- •Agrega propiedades relevantes como códigos o información de usuario
- •Usa errores personalizados para categorías específicas de problemas