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

Next.js Link元素中preventDefault的正确类型问题

在Next.js的Link组件中正确使用preventDefault的TypeScript类型方案

你遇到的问题是事件类型使用错误,以下是两种可行的解决方式:

方式一:直接指定事件对象的类型

从React导入封装的MouseEvent类型(或直接使用React.MouseEvent),作为事件参数的类型:

import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { MouseEvent } from 'react';

export default function YourComponent() {
  const router = useRouter();

  const handleBackward = (event: MouseEvent<HTMLAnchorElement>) => {
    if (history.length > 1) {
      event.preventDefault();
      router.back();
    }
  };

  return (
    <Link href="/" onClick={handleBackward}>Listing</Link>
  );
}

方式二:指定事件处理函数的类型

使用MouseEventHandler定义整个处理函数的类型,TypeScript会自动推断事件对象的类型:

import Link from 'next/link';
import { useRouter } from 'next/router';
import { MouseEventHandler } from 'react';

export default function YourComponent() {
  const router = useRouter();

  const handleBackward: MouseEventHandler<HTMLAnchorElement> = (event) => {
    if (history.length > 1) {
      event.preventDefault();
      router.back();
    }
  };

  return (
    <Link href="/" onClick={handleBackward}>Listing</Link>
  );
}

错误原因说明

  • 你尝试的MouseEvent<HTMLAnchorElement, MouseEvent>错误,是因为使用了DOM原生的MouseEvent而非React封装的React.MouseEvent,原生MouseEvent不是泛型类型。
  • 用MouseEventHandler<HTMLAnchorElement>作为事件对象的类型也不对,因为它是事件处理函数本身的类型,不是事件对象的类型,自然找不到preventDefault方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:03