如何在类转换器上获取无效类型/类型不匹配的警告/错误列表



类转换器库提供了将json格式的纯javascript对象转换为ES6类的功能

但我看到当json对象中的类型和类中定义的类型具有不匹配的时,它不会抛出任何错误

该类看起来像遵循

class MyClass {
id: string;
name: string;
age: number; // here is where i put a "abc" to test
@Type(() => Date)
date: Date;
}

在myclass2上,由于年龄(23(是一个数字,所以它运行良好。但在myclass1中,年龄被设置为";abc";不能将其转换为类中定义的数字类型。然而,代码顺利通过,没有任何错误。

const json1 = {id: "123", name: "bob", age: "abc", date: "12/15/2019"};
const json2 = {id: "123", name: "bob", age: 23, date: "12/15/2019"};
const myclass1 = plainToClass(MyClass, json1);
const myclass2 = plainToClass(MyClass, json2);
console.log("myclass1", myclass1);
console.log("myclass2", myclass2);

在控制台日志中,您可以看到,尽管年龄的类型已经明确定义,但年龄的值仍然可以设置为字符串。

控制台日志图像在这里(我没有足够的RP点来附加url,这是一个新帐户(

我的问题是,我如何才能得到关于这种不匹配的警告/错误列表。

谢谢你的帮助。

https://stackblitz.com/edit/class-transformer-auuhvs

仅使用类转换器库是不可能做到这一点的。

类转换器验证器库需要按照npm包的README文档中描述的方式使用。

简而言之,类的每个属性都必须用特定的验证器注释进行注释。在这种情况下,我们使用@IsString@IsNumber

class MyClass {
@IsString()
id: string;
@IsString()
name: string;
@IsNumber()
age: number;
@Type(() => Date)
date: Date;
}

然后使用验证器库中的方法对其进行验证,如下所示。

transformAndValidate(MyClass, json1)
.then((classObject: MyClass) => {
// now you can access all your class prototype method
console.log("validated class1", classObject);
})
.catch(err => {
// here you can handle error on transformation (invalid JSON)
// or validation error (e.g. invalid email property)
console.error("validation error class1:", err);
});

结果是验证错误列表(如果存在(。对于下面这样的json1,我预计会出现一个验证错误,即年龄不是json中的数字。

const json1 = { id: "123", name: "bob", age: "abc", date: "12/15/2019" };

结果与您在下面的屏幕截图中看到的完全一样。您可以看到在反序列化过程中遇到的确切错误,并验证错误的"constraints"属性。错误消息截图(图片是一个链接,因为我没有足够的RP(

验证错误的演示可以在下面的同一链接中看到。https://stackblitz.com/edit/class-transformer-fxk9ay?file=src%2Fapp%2Fapp.component.ts

最新更新