Javascript Axios generic Post在TypeScript中返回错误的类型
我正在尝试使用Axios API返回类型化对象。我使用泛型类型声明我正在返回Javascript Axios generic Post在TypeScript中返回错误的类型,javascript,typescript,generics,axios,typescript-generics,Javascript,Typescript,Generics,Axios,Typescript Generics,我正在尝试使用Axios API返回类型化对象。我使用泛型类型声明我正在返回GetSliceResponse的一个实例,但不幸的是,Axios似乎仍然返回任何类型的对象 我的代码如下所示 export class GetSliceResponse { Success: boolean; } Axios.post<GetSliceResponse>("myurl/Get", request).then(o => { var expectedResult = (
GetSliceResponse
的一个实例,但不幸的是,Axios似乎仍然返回任何类型的对象
我的代码如下所示
export class GetSliceResponse
{
Success: boolean;
}
Axios.post<GetSliceResponse>("myurl/Get", request).then(o => {
var expectedResult = (new GetSliceResponse()) instanceof GetSliceResponse;
//expectedResult = true;
var unexpectedResult = o.data instanceof GetSliceResponse;
//unexpectedResult = false;
});
如上代码所示,我可以使用
new
语法正确创建我的类型的实例,但是Axios数据属性似乎不受类型声明的影响 仅仅因为某些东西与类具有相同的属性并不意味着它是类的实例。在您的例子中,来自服务器的响应可能是使用JSON.parse
解析的,它将创建简单的对象。只有使用newgetsliceresponse
创建的对象才是该类的实例
post方法的类型参数旨在帮助描述响应的形状,但实际上不会更改运行时行为(也不能,因为在编译过程中会删除)
也就是说,您仍然可以访问对象的属性,就像对象是类的实例一样,唯一不起作用的是instanceof
,并且不希望出现任何方法
如果要确保没有人错误地使用instanceof
,可以改为使用type am接口
如果确实需要该类,可以使用new
创建实例,并使用Object.assign
分配所有字段
export class GetSliceResponse
{
Success: boolean;
}
Axios.post<GetSliceResponse>("myurl/Get", request).then(o => {
o = Object.assign(new GetSliceResponse(), o);
});
导出类GetSliceResponse
{
成功:布尔;
}
post(“myurl/Get”,request)。然后(o=>{
o=Object.assign(新的GetSliceResponse(),o);
});
非常感谢Titian,在查看了源代码之后,您完全正确地说它所做的一切都是调用JSON.parse。我可能不应该假设它实际上是在进行类型转换。您的解决方案简洁明了,效果完美。再次感谢。
export class GetSliceResponse
{
Success: boolean;
}
Axios.post<GetSliceResponse>("myurl/Get", request).then(o => {
o = Object.assign(new GetSliceResponse(), o);
});