Javascript 如何获取类转换器上无效类型/类型不匹配的警告/错误列表
提供将json格式的普通javascript对象转换为ES6类的函数 但我看到,当json对象中的类型和类中定义的类型不匹配时,它不会抛出任何错误 这门课看起来如下Javascript 如何获取类转换器上无效类型/类型不匹配的警告/错误列表,javascript,typescript,class-transformer,Javascript,Typescript,Class Transformer,提供将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上,它可以正常工
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,这是一个新帐户)
我的问题是,如何才能获得关于此类不匹配的警告/错误列表
谢谢你的帮助
仅使用类转换器库是不可能做到这一点的 库需要按照npm包的自述文件中描述的方式使用 简而言之,类的每个属性都必须用特定的验证器注释进行注释。在本例中,我们使用
@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)
验证错误的演示可以在下面的同一链接中看到。
文档很清楚,它只是一个简单的serdes库。好的,但它没有提到当无法转换为typescript类型时的行为。所以答案是,当将json对象转换为typescript类时,class transformer并没有真正执行类型检查并给出错误列表?在运行时没有“typescript类型”。它只是按原样使用输入值。生成的类实例将只具有错误的属性,就像您所经历的那样。