【问题标题】:What is the difference between "enableImplicitConversion" and "transform" in NestJSNestJS中的“enableImplicitConversion”和“transform”有什么区别
【发布时间】:2022-01-24 04:25:22
【问题描述】:

不知道有什么区别

transform: true

 transformOptions: {
      enableImplicitConversion: true,
    }

从文档中我不太明白在什么情况下必须使用哪个。

https://docs.nestjs.com/techniques/validation https://github.com/typestack/class-transformer

【问题讨论】:

    标签: javascript nestjs class-validator class-transformer


    【解决方案1】:

    transform 表示ValidationPipe 将在管道调用结束时返回新的类实例。这对运行的验证没有影响,因为无论如何都会调用plainToClass,以便validate 可以针对该类运行。

    enableImplicitConversion 将告诉class-transformer,如果它看到一个当前是字符串(如布尔值或数字)的基元,则假设它应该是基元类型并对其进行转换,即使@Type(() => Number) 或@ 987654329@ 未使用。

    【讨论】:

    • 文档 (docs.nestjs.com/techniques/validation) 显示了一个示例,其中包含 string -> int 在控制器内 transform: true > 启用自动转换选项后,ValidationPipe 还将执行原始类型的转换所以在这个如果这两个参数都在相同的模式下工作,但在“转换”的情况下它最后返回类实例?
    • implicitiConversion 对于像 @Query()@Param() 这样的东西很有用,它们总是以字符串的形式出现。对于请求主体,json 和 urlencoded 通常可以很好地将它们解析为它们的原语,所以也要记住这一点
    • 我们是否可以声称transform 仅用于转换DTO(对象)时enableImplicitConversion 甚至用于@Query@Param 类型转换?
    • 不完全。就像我说的,transform: true 告诉管道返回自动转换的值。如果未设置,将使用原始传入的值
    • 我仍然不明白主要答案,它们之间有何不同以及何时使用它,如果最终它们加或减相同的东西。可能需要做一些研究。感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2014-02-27
    • 2014-07-13
    • 2015-11-17
    • 2016-12-06
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多