typestack/class-transformer

fix: incorrect property name in validation messages when using @Expose()

prdepyadv opened this issue · 2 comments

Description

When using the @expose decorator from class-transformer in combination with the @IsString decorator from class-validator, the validation message returns the original property name instead of the exposed name.

Lets take this below example:

import { Expose } from 'class-transformer';
import { IsString } from 'class-validator';

export class User {
  @Expose({ name: 'uid' })
  id: number;

  firstName: string;

  lastName: string;

  @Expose({ name: 'secretKey' })
  @IsString()
  password: string;
}

If I pass a number or an invalid value to secretKey, the validation message returned is 'password must be a string'. However, it should be 'secretKey must be a string' based on the exposed name.

Expected behavior

The validation message should use the exposed name defined by the @expose decorator. For example, if the secretKey field is incorrectly set, the error message should be 'secretKey must be a string'.

Actual behavior

The validation message returns the original property name. In the provided example, it returns 'password must be a string' instead of 'secretKey must be a string'.

Hello @prdepyadv,

why would you expect that? To my knowledge, the two libraries are not connected and @Expose should not affect validation at all. Is it stated somewhere in the docs that this should work?

Hello @diffy0712 ,

Thank you for your response. I understand that @expose from class-transformer and @IsString from class-validator are not inherently connected. However, I was under the impression that when transforming and validating an object, the final output (including validation messages) would reflect the exposed property names to maintain consistency and clarity for the end users.

Given this, could you please confirm if my understanding is correct? If not, could you provide guidance on how to achieve this behavior? Specifically, is there an alternative approach or an additional configuration that would allow validation messages to use the exposed property names?

Thank you for your assistance!