Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取类转换器上无效类型/类型不匹配的警告/错误列表_Javascript_Typescript_Class Transformer - Fatal编程技术网

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

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上,它可以正常工

提供将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,这是一个新帐户)

我的问题是,如何才能获得关于此类不匹配的警告/错误列表

谢谢你的帮助


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

库需要按照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类型”。它只是按原样使用输入值。生成的类实例将只具有错误的属性,就像您所经历的那样。