gpt4 book ai didi

javascript - Axios 泛型 Post 在 TypeScript 中返回错误的类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:32 29 4
gpt4 key购买 nike

我正在尝试使用 Axios API 返回类型化对象。我正在使用泛型类型来声明我正在返回一个 GetSliceResponse 的实例,但不幸的是 Axios 似乎仍然返回一个类型为 any 的对象。

我的代码是这样的

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;
});

Http 响应正是您所期望的:

{"Success":false}

如上代码所示,我可以使用 new 语法正确创建我的类型的实例,但 Axios 数据属性似乎不受类型声明的影响。

最佳答案

仅仅因为某物具有与该类相同的属性并不意味着它是该类的一个实例。在您的情况下,服务器的响应可能使用 JSON.parse 进行解析,这将创建简单的对象。只有使用 new GetSliceResponse 创建的对象才是该类的实例。

post 方法的类型参数旨在帮助描述响应的形状,但实际上不会改变运行时行为(也不可能,基因在编译期间被删除)。

也就是说,您仍然可以访问对象的属性,就好像对象是类的实例一样,唯一不起作用的是 instanceof 并且不要期望任何方法出席。

如果你想确保没有人错误地使用instanceof,你可以将类型改为接口(interface)。

如果您确实需要该类,您可以使用 new 创建实例并使用 Object.assign 分配所有字段

export class GetSliceResponse 
{
Success: boolean;
}

Axios.post<GetSliceResponse>("myurl/Get", request).then(o => {
o = Object.assign(new GetSliceResponse(), o);
});

关于javascript - Axios 泛型 Post 在 TypeScript 中返回错误的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726908/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com