The 类转换器文档 https://github.com/typestack/class-transformer#implicit-type-conversion say:
隐式类型转换
注意如果您将类验证器与类转换器一起使用,您可能不想启用此功能。
为什么不?
我做了一些测试,没有发现任何问题。
实际上是相反的:使用类转换器 https://github.com/typestack/class-transformer (with enableImplicitConversion=true
and 反映元数据 https://github.com/rbuckton/reflect-metadata) 结合类验证器 https://github.com/typestack/class-validator似乎是一个完美的配合,并且它由开箱即用的支持NestJS https://docs.nestjs.com/techniques/validation
我们应该这样做的一些原因not使用隐式转换。
实在是太宽容了
例如当我们使用@IsString()
每个类型都会通过验证 - 即使是普通对象也会被转换为字符串[object Object]
,这可能不是你想要的
这是一个堆栈闪电战示例 https://stackblitz.com/edit/class-validate-transform
@Transform()
可能不起作用
Example:
class Test {
@Transform(value => (value === "zero" ? 0 : value), {
toClassOnly: true
})
val: number;
}
const transformed = plainToClass(Test, {
val: 'zero'
}, {
enableImplicitConversion
});
// transformed.val = NaN
这里的问题是隐式转换之前已经发生过@Transform()
由于它无法将字符串转换为数字,因此将值设置为NaN
转换 Stackblitz 示例 https://stackblitz.com/edit/class-validate-transform-2?file=index.ts
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)