TS2345报错:unknown类型无法赋值给SetStateAction<IAluno[]>参数如何解决?
TypeScript TS2345 报错解决方法
报错根因
你使用的HTTP请求库(常见为axios)默认不会自动识别接口返回数据的类型,因此response.data的默认类型为unknown,而你的setAlunos状态更新函数要求入参必须是IAluno[]类型或返回该类型的更新函数,类型不匹配触发报错。
排查&解决步骤
- 最优解法:给请求方法指定泛型,声明接口返回的数据类型
以axios为例,修改请求代码为:
此时TypeScript会自动将const response = await api.get<IAluno[]>('/alunos');response.data的类型推导为IAluno[],传入setAlunos即可消除类型报错。 - 兼容旧接口推荐方案:补充运行时类型校验
旧接口返回格式不可控,建议加一层格式校验避免运行时异常:const response = await api.get('/alunos'); // 示例校验逻辑,可根据IAluno的实际结构调整校验规则 if (Array.isArray(response.data) && response.data.every(item => typeof item === 'object' && 'id' in item && 'nome' in item )) { setAlunos(response.data as IAluno[]); } else { console.error('/alunos 接口返回格式不符合预期'); } - 临时调试绕过方案(不推荐长期使用)
仅需快速跑通调试的情况下,可以直接用类型断言强制指定类型:setAlunos(response.data as IAluno[]);
内容的提问来源于stack exchange,提问作者Rodrigo Temporim
相关产品推荐
相关产品推荐

