Javascript Axios generic Post在TypeScript中返回错误的类型

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 = (

我正在尝试使用Axios API返回类型化对象。我使用泛型类型声明我正在返回
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);
});