TypeScript 2.8.3类型推导异常:错误推断为never类型技术问询
解决TypeScript 2.8.3中axios请求后类型推断为never的问题
我来帮你拆解并解决这个问题——从你贴的代码片段来看,有几个明显的点会导致TypeScript把类型错误推断成never,下面一步步来修复:
首先修正代码里的笔误与逻辑遗漏
你在then回调里犯了两个小错误:
- 参数命名是
resp,但后面写的是res...,这个未定义的变量会直接让TS无法识别类型,进而抛出异常; - axios的响应数据是存在
resp.data属性里的,你之前的代码直接试图把响应对象赋值给customers,类型完全不匹配,这也是推断异常的核心原因之一。
先把这部分代码修正:
axios.get<ICustomer[]>(`http://localhost:8080/customers`) .then(resp => this.setState({ customers: resp.data }))
针对TS 2.8.3的兼容性调整
TS 2.8.3是比较老旧的版本,它的类型推断能力远不如新版TS,即使修正了上面的问题,可能还是会有类型推断异常,这时候可以用两个小技巧来兜底:
1. 显式标注回调参数的类型
手动给then的回调参数指定类型,避免TS自动推断出错:
axios.get<ICustomer[]>(`http://localhost:8080/customers`) .then((resp: { data: ICustomer[] }) => { this.setState({ customers: resp.data }); })
2. 给组件state添加显式类型标注
虽然你已经定义了IState接口,但在类的state初始化时加上显式类型,能让TS更明确地识别state的结构:
public state: IState = { customers: [] }
额外建议
如果项目允许的话,尽量把TypeScript升级到3.x及以上的稳定版本——旧版本的TS在泛型处理、类型推断上有很多局限性,升级后很多类似的类型问题会自动消失,同时还能获得更多实用的新特性。
内容的提问来源于stack exchange,提问作者echen
相关产品推荐
相关产品推荐

