代码之家  ›  专栏  ›  技术社区  ›  Desu

@Transform()布尔强制转换对DTO不起作用

  •  1
  • Desu  · 技术社区  · 2 年前

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

    下面是我所做的事情和我的问题的一个简单示例:

        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,则数据仍然相同。这并不像我们通过 @Transform()

    我做错什么了吗?感谢您的帮助,并透露了一些信息。

    我试过这些相关的参考资料,但似乎没有任何效果。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Jay McDoniel    2 年前

    如果 transform: true 未设置为的选项 ValidationPipe 然后 @Transform() 您正在使用的将仅在内存中用于 class-validator 检查并保持传递给路由处理程序的值。背景 变换:真 意味着Nest会传回 plainToInstance 已发送内容的值。