You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:06:03