Typescript中setState回调函数参数类型定义报错ts(2345)如何解决
错误原因
你当前对setState的类型定义仅支持直接传入新的数组值,没有覆盖「接收旧值返回新值的回调函数」这一使用场景。你调用setState时传入了函数类型的参数,TypeScript 会将该函数和你定义的数组类型做匹配,自然会提示缺少数组的pop/push等方法的类型不匹配错误。
修复方案
首先优化类型定义,给setState补充回调函数类型的参数支持:
// 该类型本身已经包含空数组的情况,无需额外拼接`| []` type Previous = { oneArg: number; anotherArg: number; }[]; type Props = { // 参数同时支持直接传入新值、传入更新回调两种形式 setState: (arg: Previous | ((prev: Previous) => Previous)) => void; }
修改后业务代码可以选择手动给previous参数显式标注类型(也可以省略,TypeScript 会自动推导类型):
function myFunction(someArg: number) { props.setState((previous: Previous) => { return previous.filter((element, index) => { return index !== someArg; }, ); }); }
修改后类型匹配即可正常通过编译,同时保留了setState两种传参方式的类型校验。
内容的提问来源于stack exchange,提问作者Lorenz Mueller
相关产品推荐
相关产品推荐

