@Transform() 布尔转换在 DTO 上不起作用

Des*_*esu 3 typescript class-validator nestjs class-transformer

我在 DTO 中使用 NestJS 和类转换器。

这是我所做的和我的问题的一个简单示例:

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

我什至尝试过@Transform(({ value }) => { return value === "true" || value === true || value === 1})

现在,在我的控制器中:

@Post("something")
someOperation(@Body()  data : SomeDTO){
    console.log(data); 
}
Run Code Online (Sandbox Code Playgroud)

记录数据时,预期的布尔值doDelete仍然是字符串,并且没有转换为其本机布尔类型。

是否尝试过提供这样的数据: @Transform(({ value }) => { return false})

但在控制器中,如果我们将原始DTO doDelete设置为true,数据仍然是相同的。它没有像我们通过 暗示的那样转换为 false @Transform()

我做错什么了吗?感谢您的帮助并提供了一些线索。

我已经尝试过这些相关参考文献,但似乎没有任何效果。

Jay*_*iel 7

如果transform: true未设置为 的选项,ValidationPipe@Transform()您正在使用的将仅在内存中用于检查class-validator,而不会作为传递给路由处理程序的值保留。设置transform: true意味着 Nest 将传回plainToInstance已发送的值。