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

如何在React中为history.goBack定义正确的TS接口 替换any类型

解决方案

你只需要把IGoBackLinkProps里的onGoBackClick的any类型替换为对应的事件处理函数类型即可,可根据使用场景二选一:

场景1:不需要访问点击事件对象(你当前的用法直接适用)

你现在传入的回调是无参数、无返回值的history.goBack()执行逻辑,直接用无参空返回函数类型即可:

// GoBackLink.tsx
interface IGoBackLinkProps {
  text: string;
  // 替换原有any类型
  onGoBackClick: () => void;
}

const GoBackLink: React.FC<IGoBackLinkProps> = ({ text, onGoBackClick }) => {
  return (
    <Link className={styles.link} to='/' onClick={onGoBackClick}>
      {text}
    </Link>
  );
};

export default GoBackLink;

场景2:需要在回调中访问事件对象

如果后续你需要在onGoBackClick中调用事件对象的方法(比如e.preventDefault()取消Link默认跳转行为、e.stopPropagation()阻止冒泡),就用React提供的锚元素鼠标事件处理类型:

// GoBackLink.tsx
interface IGoBackLinkProps {
  text: string;
  // 替换原有any类型
  onGoBackClick: React.MouseEventHandler<HTMLAnchorElement>;
}

// Page404 中如果要阻止默认跳转,回调可以这么写
<GoBackLink 
  text={'Назад'} 
  onGoBackClick={(e) => {
    e.preventDefault();
    history.goBack();
  }} 
/>

补充说明

你当前Page404组件用的React.FC<RouteComponentProps>是react-router-dom v5的标准正确类型,会自动推导history对象的所有属性和方法类型,不需要额外修改。如果后续升级到react-router-dom v6,已经移除了RouteComponentProps,可以用useNavigate钩子实现返回逻辑,写法参考:

// react-router-dom v6 写法示例
import { useNavigate } from 'react-router-dom';
const Page404 = () => {
  const navigate = useNavigate();
  return (
    <section className={styles.section}>
      <GoBackLink text={'Назад'} onGoBackClick={() => navigate(-1)} />
    </section>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:18:04