Javascript 如何使用TypeScript中的“class transformer”将API请求的响应转换为类实例?
我有一个调用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>
请求(方法: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