如何使用类验证器和带有plainToInstance或plainToClass的类转换器来验证文本数组



当使用plainToInstance向类强制转换文字时,我的验证不会生效。转换似乎在plainToInstance()之后使用Array(3) [Foo, Foo, Foo],但验证没有显示错误:

Codesandbox演示

import { plainToInstance } from 'class-transformer';
import { IsEmail, validate } from 'class-validator';
class Foo {
@IsEmail()
email: string;
}
(async () => {
const data: Foo[] = plainToInstance(Foo, [{ email: '' }, { email: '1@' }, { email: 'bar@domain.com'}]);

// no errors
let errors = await validate(data); // no errors (errors = [])
console.info(errors);
// this errors
const foo = new Foo();
errors = await validate(foo); // errors (errors Array(1) [ValidationError])
console.info(errors);
})();

我错过了哪一步?

似乎validate并不是用来处理类数组的。它没有显示错误,因为数组没有任何与它相关联的元数据,这些元数据会触发任何验证。

您可能想要做的是分别验证每个对象。

let errors = await Promise.all(data.map(d => validate(d)))

最新更新