Si alguna vez has usado class-transformer con @Transform es posible que te hayas encontrado con que una propiedad derivada aparece como undefined aun cuando agregaste @Transform.
El motivo es sencillo: por defecto class-transformer solo ejecuta @Transform en las propiedades que existen en el objeto plano de entrada. Si el objeto plano solo contiene la clave email, por ejemplo { email: abc@test.com }, entonces cualquier propiedad que no esté presente, como normalized_email, se omite y su transformador no se dispara.
La solución directa es forzar que esa propiedad entre en el pipeline de transformación usando @Expose. Si decoras normalized_email con @Expose y con @Transform el transformador se ejecutara incluso si la clave normalized_email no estaba en el objeto plano de entrada.
Otra alternativa global si no quieres añadir @Expose en cada atributo es ajustar las opciones globales de transformación. Por ejemplo activar excludeExtraneousValues hace que solo se conserven las propiedades marcadas con @Expose, lo que obliga a declarar explícitamente lo que debe mantenerse. Otra opción es usar la estrategia exposeAll para que todas las propiedades queden expuestas por defecto y solo uses @Expose donde necesites un transformador especial.
Si no quieres lidiar con decoradores, una solución simple y fiable es usar un getter calculado en la clase. Definir get normalized_email() { return this.email } evita la necesidad de @Expose o @Transform y siempre devuelve el valor derivado.
Resumen de buenas prácticas: usar @Transform solo si la propiedad existe o combinarlo con @Expose para forzar su ejecución; considerar excludeExtraneousValues o la estrategia exposeAll para control global; y usar getters para propiedades derivadas sencillas y deterministas.
En Q2BSTUDIO somos una empresa de desarrollo de software que ayuda a equipos y empresas a implementar buenas prácticas en arquitecturas y DTOs, así como soluciones robustas de aplicaciones a medida y software a medida. Si necesitas apoyo implementando transformaciones, validaciones y patrones de datos en proyectos reales, nuestros servicios abarcan desde desarrollo de aplicaciones a medida hasta soluciones de inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Contamos con experiencia en ciberseguridad y pentesting para garantizar que tus pipelines y datos estén protegidos y en arquitecturas cloud escalables y seguras.
Si quieres que te ayudemos a elegir la mejor estrategia entre getters, transforms o exposures para tus DTOs o necesitas un desarrollo a medida que integre inteligencia artificial, agentes IA, analitica con power bi o despliegue en servicios cloud aws y azure, ponte en contacto y te asesoramos.
Y tu, te has encontrado con este comportamiento de @Transform alguna vez? Como sueles manejar campos derivados en DTOs getters, transforms u otra estrategia? Cuentanos tu experiencia.