我使用nestjs和class-validator,我有以下情况:
- 两个具有相同字段名称但具有不同类型的类:
class A {
@IsDefined()
field: number;
}
class B {
@IsDefined()
field: string;
}
- 第三个类包含A或B类型的元素数组,我的问题是如何根据自己的类验证每个数组成员:
class C {
@ValidateNested({ each: true })
@Type(I_DON'T_KNOW_WHAT_TO_DO_HERE)
array: (A | B)[];
}
如何验证阵列?
先谢了!
1条答案
按热度按时间5n0oy7gb1#
你应该有一个描述性的字段,以允许类转换器识别要转换的类型,并在验证中使用。
在下面的例子中,如果属性
"version"
等于“v1,"则field
应该是number
,另一方面,如果属性version
等于“v2,”则属性field
应该是string
.在
discriminator
属性中,您应该设置一个字段,用于标识嵌套对象的不同多态形式。subTypes.[].value
是用于验证的类,subTypes.[].name
是discriminator
字段应该具有的值,以假定subTypes.[].name
字段中添加的类。现在你的控制器应该看起来像这样:
你可以做你的请求:
如果将嵌套数组的第二个元素更改为
version
属性为“v2”的数字,则会看到错误:一个三个三个一个
参考文献:https://github.com/typestack/class-transformer#providing-more-than-one-type-option