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 如何使用TypeScript中的“class transformer”将API请求的响应转换为类实例?_Javascript_Typescript_Javascript Objects_Transformation_Class Transformer - Fatal编程技术网

Javascript 如何使用TypeScript中的“class transformer”将API请求的响应转换为类实例?

Javascript 如何使用TypeScript中的“class transformer”将API请求的响应转换为类实例?,javascript,typescript,javascript-objects,transformation,class-transformer,Javascript,Typescript,Javascript Objects,Transformation,Class Transformer,我有一个调用API的普通方法请求(方法:HttpMethod,url:string,…)。我正在使用打字脚本 我需要将此API请求的响应转换为带有类转换器的类实例(或者不带它:D) 例如: class用户响应{ id:编号;l foo:string; 酒吧:字符串; } const user=wait请求(HttpMEthod.GET,'/user/1'); //`user`应该是类实例`UserResponse` 我知道我不能像这样使用泛型: const Request = <T>

我有一个调用API的普通方法
请求(方法:HttpMethod,url:string,…)
。我正在使用打字脚本

我需要将此API请求的响应转换为带有
类转换器的类实例(或者不带它:D)

例如:

class用户响应{
id:编号;l
foo:string;
酒吧:字符串;
}
const user=wait请求(HttpMEthod.GET,'/user/1');
//`user`应该是类实例`UserResponse`
我知道我不能像这样使用泛型:

const Request = <T>(method: HttpMethod, url: string, ...) => {
  // axios or something else...
  return plainToClass(T, res);
}

const user = await Request<UserResponse>(HttpMEthod.GET, '/user/1');

我做错了什么?

首先,什么是
请求
?我假设这会返回一个
承诺

您有几个问题:

  • 实际上,您从未将响应映射到
    新用户响应
  • TypeScript中的泛型不会生成新的响应。它的作用更像一个
    接口
    ,在这里它更像一个数据契约,而不是一个完全初始化的类
  • 以下是您需要如何做到这一点:

    class用户响应{
    公众id:号码;
    公共foo:string;
    公共酒吧:字符串;
    构造函数(用户:UserResponse){
    Object.assign(this,user);//或单独设置每个道具
    }
    }
    const response=wait请求(HttpMEthod.GET,'/user/1');
    
    const user=新用户响应(响应)我的
    userresponse
    any
    类型的问题。。。为什么类没有自动拥有的类型?
    UserResponse
    不是类型
    any
    。问题在于
    UserResponse
    。。它不在我的代码中。。。或者WebStorm IDE认为它的
    any
    UserResponse
    是从共享库(自定义npm包)导入的,该共享库是在编译此共享库时构建到.js+d.tsI的。。。现在天气很好。谢谢:)
    const Request = <T>(method: HttpMethod, url: string, ...,  transformTo?: { new (): T }) => {
      // axios or something else...
      return plainToClass(transformTo, res);
    }
    
    const user = await Request(HttpMEthod.GET, '/user/1', ... , new UserResponse());
    
    const user: unknown