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

如何修复Next.js中next/link组件的TypeScript错误

解决Next.js Link组件的TypeScript类型错误

问题原因

你遇到的Type 'string' is not assignable to type 'RouteOrQuery'错误,是因为项目里用了类型安全路由工具(比如nextjs-routes),它会给Link组件的href属性强制绑定预定义的路由类型,不允许直接传任意拼接的字符串。你代码里的/${major}、/${major}/${slug}都是动态生成的字符串,不符合工具要求的类型规范。

解决方案

方案1:使用类型安全路由的生成方法(推荐)

如果你的项目依赖nextjs-routes,它会自动生成路由相关的类型和辅助函数。你可以用它提供的route函数来生成符合类型要求的href:

// 导入生成的route函数
import { route } from 'nextjs-routes';

// ...其他代码不变

<li><Link href={route(`/${major}`)}>{majors[major as keyof typeof majors]}</Link></li>
<li><Link href={route(`/${major}/${slug}`)}>{schoolName}</Link></li>

route函数会自动校验路由格式,返回符合RouteOrQuery类型的结果,同时保留类型检查能力。

方案2:约束major的类型范围

把Props里的major类型从string改成keyof iMajors,这样TypeScript就知道major只能是预定义的几个值,拼接出来的路由字符串也会被识别为合法的路由类型:

type Props = {
    schoolName: string;
    // 把string改成keyof iMajors,约束major只能是预定义的键值
    major: keyof iMajors;
    slug: string;
};

这样修改后,/${major}和/${major}/${slug}就会被TypeScript判定为合法的路由字符串,不会再报错。

方案3:临时类型断言(不推荐)

如果只是临时解决问题,可以把字符串断言为RouteOrQuery类型,但这样会失去类型安全检查的优势:

// 先导入类型
import type { RouteOrQuery } from 'nextjs-routes';

// ...其他代码不变

<li><Link href={`/${major}` as RouteOrQuery}>{majors[major as keyof typeof majors]}</Link></li>
<li><Link href={`/${major}/${slug}` as RouteOrQuery}>{schoolName}</Link></li>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28