如何在 class 变压器上获得无效 types/type 不匹配的 warnings/errors 列表
How to get warnings/errors list for invalid types/type mismatch on class transformer
Class transformer library 提供将 json 格式的普通 javascript 对象转换为 ES6 class
的函数
但我看到当 json 对象中的类型与 class 中定义的类型不匹配时它不会抛出任何错误
class 如下所示
class MyClass {
id: string;
name: string;
age: number; // here is where i put a "abc" to test
@Type(() => Date)
date: Date;
}
在我的class2 上它工作正常,因为 age(23) 是一个数字。但在 myclass1 中年龄设置为“abc”,无法转换为 class 中定义的数字类型。然而代码没有任何错误。
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);
在控制台日志中可以看到虽然明确定义了年龄的类型,但年龄的值仍然可以设置为字符串。
console log image here(我没有足够的RP点数来附加一个url,这是一个新帐户)
我的问题是我怎样才能得到 warning/error 像这样的不匹配列表。
感谢您的帮助。
仅使用 class 转换器库无法做到这一点。
class-transformer-validator 需要按照 npm 包的 README 文档中描述的方式使用库。
简而言之,class 中的每个 属性 都必须使用特定的验证器注释进行注释。在这种情况下,我们使用 @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" };
结果与您在下面的屏幕截图中看到的完全一样。您可以在错误的“约束”属性 上看到反序列化和验证器期间遇到的确切错误。
error message screenshot(图片是link因为我没有足够的RP)
可以在下面的 link 中看到验证错误的演示。
https://stackblitz.com/edit/class-transformer-fxk9ay?file=src%2Fapp%2Fapp.component.ts
Class transformer library 提供将 json 格式的普通 javascript 对象转换为 ES6 class
的函数但我看到当 json 对象中的类型与 class 中定义的类型不匹配时它不会抛出任何错误
class 如下所示
class MyClass {
id: string;
name: string;
age: number; // here is where i put a "abc" to test
@Type(() => Date)
date: Date;
}
在我的class2 上它工作正常,因为 age(23) 是一个数字。但在 myclass1 中年龄设置为“abc”,无法转换为 class 中定义的数字类型。然而代码没有任何错误。
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);
在控制台日志中可以看到虽然明确定义了年龄的类型,但年龄的值仍然可以设置为字符串。
console log image here(我没有足够的RP点数来附加一个url,这是一个新帐户)
我的问题是我怎样才能得到 warning/error 像这样的不匹配列表。
感谢您的帮助。
仅使用 class 转换器库无法做到这一点。
class-transformer-validator 需要按照 npm 包的 README 文档中描述的方式使用库。
简而言之,class 中的每个 属性 都必须使用特定的验证器注释进行注释。在这种情况下,我们使用 @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" };
结果与您在下面的屏幕截图中看到的完全一样。您可以在错误的“约束”属性 上看到反序列化和验证器期间遇到的确切错误。 error message screenshot(图片是link因为我没有足够的RP)
可以在下面的 link 中看到验证错误的演示。 https://stackblitz.com/edit/class-transformer-fxk9ay?file=src%2Fapp%2Fapp.component.ts