类转换器文档说:
隐式类型转换
注意如果您将类验证器与类转换器一起使用,您可能不想启用此功能。
为什么不?
我做了一些测试,没有发现任何问题。
实际上是相反的:使用class-transformer(withenableImplicitConversion=true
和reflect-metadata)与class-validator结合似乎是一个完美的选择,并且NestJS开箱即用地支持它
类转换器文档说:
隐式类型转换
注意如果您将类验证器与类转换器一起使用,您可能不想启用此功能。
为什么不?
我做了一些测试,没有发现任何问题。
实际上是相反的:使用class-transformer(withenableImplicitConversion=true
和reflect-metadata)与class-validator结合似乎是一个完美的选择,并且NestJS开箱即用地支持它
我们不应该使用隐式转换的一些原因。
例如,当我们使用@IsString()
每种类型时,都会通过验证——即使是普通对象也会被转换为字符串[object Object]
,这可能不是您想要的
这是一个stackblitz示例
@Transform()
可能行不通例子:
class Test {
@Transform(value => (value === "zero" ? 0 : value), {
toClassOnly: true
})
val: number;
}
const transformed = plainToClass(Test, {
val: 'zero'
}, {
enableImplicitConversion
});
// transformed.val = NaN
这里的问题是隐式转换之前已经发生过@Transform()
,并且由于它无法将字符串转换为数字,因此将值设置为NaN