fix: exposeDefaultValues does not work
Description
Please consider this code:
import "reflect-metadata";
import { Expose, plainToInstance } from "class-transformer";
import { IsNumber } from "class-validator";
class IMDB {
@IsNumber()
@Expose()
rating: number = 0;
@IsNumber()
@Expose()
votes: number;
@IsNumber()
@Expose()
id: number;
}
const plainObj = {
votes: 1000,
id: 1
};
const movie1 = plainToInstance(IMDB, plainObj, {
excludeExtraneousValues: true,
enableImplicitConversion: true,
exposeUnsetFields: false,
exposeDefaultValues: false,
});
console.log(movie1); // IMDB { rating: 0, votes: 1000, id: 1 }
As you can notice IMDB class has a property rating with default value. Sometimes I want the instance object to not have default value if the property is missing and sometimes I do.
To achieve this using exposeDefaultValues: false option if I don't want default value for the missing property.
exposeDefaultValues: false seems to not be working in above code snippet.
Expected behavior
Default value should not be set to rating property i.e. rating property should not have value of 0 and should not be present in movie1 object.
Actual behavior
'ratingproperty has default value set inmovie1` object.
Hey @js-d-coder ,
I faced with similar issue during upgrading to Node 18 and using "target": "es2022" instead of es2021 in tsconfig. Switching back to es2021 helped me 🤷♂️
I'm seeing the same issue where exposeDefaultValues is being ignored for plainToClass.
It seems that, when used together with exposeUnsetFields:false, exposeDefaultValues:false does not work as expected.
I think this should be checked.