如何在 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 像这样的不匹配列表。

感谢您的帮助。

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

仅使用 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