我正在尝试使用Axios API返回一个类型化对象。我使用泛型类型来声明我正在返回#!/usr/bin/env ruby
的实例但不幸的是,Axios似乎仍然返回任何类型的对象。
我的代码看起来像这样
GetSliceResponse
Http响应正如您所期望的那样:
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;
});
如上面的代码所示,我可以使用{"Success":false}
语法正确创建我的类型的实例,但Axios数据属性不受类型声明的影响。
答案 0 :(得分:1)
仅仅因为某些东西具有与该类相同的属性并不意味着它是该类的实例。在您的情况下,服务器的响应可能使用JSON.parse
进行解析,这将创建简单的对象。只有使用new GetSliceResponse
创建的对象实际上才是该类的实例。
post方法的类型参数旨在帮助描述响应的形状,但实际上不会改变运行时行为(也不会在编译期间擦除遗传)。
这就是说,您仍然可以访问对象的属性,就好像该对象是该类的实例一样,唯一不起作用的是instanceof
并且不要期望任何方法在场。
如果你想确保没有人误用instanceof
,你可以改为使用类型am接口。
如果您确实需要该课程,可以使用new
创建实例并使用Object.assign
分配所有字段
export class GetSliceResponse
{
Success: boolean;
}
Axios.post<GetSliceResponse>("myurl/Get", request).then(o => {
o = Object.assign(new GetSliceResponse(), o);
});