Булево преобразование @Transform() не работает в DTO

Я использую nestJS и класс-трансформер внутри DTO.

Вот простой пример того, что я сделал и моя проблема:

    export class SomeDTO{
        @Transform(({ value }) => value === "true" || value === true || value === 1)
        @IsBoolean()
        doDelete : boolean;
    }

Я даже пробовал @Transform(({ value }) => { return value === "true" || value === true || value === 1})

Теперь в моем контроллере:

@Post("something")
someOperation(@Body()  data : SomeDTO){
    console.log(data); 
}

При регистрации данных предполагаемое логическое значение doDelete по-прежнему является строкой и не было преобразовано в свой собственный логический тип.

Пытался ли предоставить какие-либо данные, подобные этому: @Transform(({ value }) => { return false})

Но в контроллере данные останутся прежними, если мы установим для исходного DTO doDelete значение true. Это не преобразование в false, как мы подразумевали через @Transform().

Я сделал что-то не так? Благодарен за помощь и пролитие света.

Я пробовал эти связанные ссылки, но ничего не работает.

У вас есть опция transform: true в вашем ValidationPipe?

Jay McDoniel 16.05.2022 20:22

@JayMcDoniel Правильно. Я не поставил transform : true на трубу проверки. Не могли бы вы опубликовать это в разделе ответов, чтобы я мог выбрать это в качестве решения? Спасибо за вашу помощь.

Desu 16.05.2022 20:30
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
1
2
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если transform: true не установлен в качестве параметра ValidationPipe, то используемый вами @Transform() будет использоваться только в памяти для проверки class-validator и не будет сохраняться, поскольку значение передается вашему обработчику маршрута. Установка transform: true означает, что Nest вернет значение plainToInstance для того, что уже было отправлено.

Другие вопросы по теме