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

TypeScript React自定义Hook用interface声明参数提示参数数量错误如何解决

报错原因

该报错和文件后缀无关,核心问题是你定义useSideButtons时使用了对象解构作为唯一入参,即这个Hook只接受1个包含changePage、setThisPage属性的对象,但调用时传入了2个独立参数,参数数量不匹配触发报错。

调整方案(两种可选,均保留类型声明提升可读性)

方案1:保持Interface定义,仅调整调用代码

这种方案入参语义更清晰,后续扩展参数无需调整顺序,更推荐:

// index.tsx 修改调用逻辑,将两个参数包裹为对象传入
const { goNext, goBack } = useSideButtons({ changePage, setThisPage })

方案2:不修改调用逻辑,调整Hook的参数类型定义

如果不想改动现有调用代码,可以用元组类型定义参数列表,同样能实现类型统一声明:

// useSideButtons.tsx 调整后的完整代码
import { useEffect, SetStateAction } from 'react'

// 用元组定义参数列表类型
type SideButtonsParams = [
  changePage: (newNumber?: number) => void,
  setThisPage: (value: SetStateAction<number>) => void
]

interface ISideExports {
  goNext: () => void
  goBack: () => void
}

export default function useSideButtons (...[changePage, setThisPage]: SideButtonsParams): ISideExports {
  useEffect(changePage, [])

  const goNext = (): void => {
    setThisPage((actual) => {
      const newNumber = actual + 1
      localStorage.setItem('instandaThisPage', String(newNumber))
      return newNumber
    })
  }

  const goBack = (): void => {
    setThisPage(actual => {
      if (actual > 1) {
        const newNumber = actual - 1
        changePage(newNumber)
        localStorage.setItem('instandaThisPage', String(newNumber))
        return newNumber
      } else {
        return 1
      }
    })
  }

  return { goNext, goBack }
}

内容的提问来源于stack exchange,提问作者LuisEnMarroquin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:06:03