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

Next.js 15 PageProps类型不匹配错误及@ts-expect-error失效问题解决

问题原因与解决方法

一、错误根源

这个类型错误的核心是:当前代码上下文里的PageProps接口,错误地将params定义为了Promise类型,但Next.js 15 App Router中,页面组件接收的params是同步的普通对象(不是Promise),所以你的{ slug: string[] }类型和Promise<any>不兼容。

这种情况通常是以下两种原因导致:

  • 项目中存在自定义的PageProps接口,错误地把params声明为Promise
  • 错误导入了非官方的PageProps类型,或者全局类型被覆盖

二、正确的类型定义方式

方法1:使用Next.js官方的参数类型

直接导入官方的Params类型来约束参数:

import type { Params } from 'next';

// 用Params工具类型定义slug为字符串数组
export default async function Page({ params }: { params: Params<{ slug: string[] }> }) {
  // 业务逻辑
}

方法2:让TypeScript自动推断

省略显式类型注解,让TypeScript根据路由结构自动推断params的类型:

export default async function Page({ params }) {
  // params.slug会被自动推断为string[]
}

方法3:修复自定义的PageProps

如果项目中有自定义的PageProps接口,检查并修改params的类型:

// 错误示例(导致问题的原因)
interface PageProps {
  params: Promise<{ slug: string[] }>; // 错误:params不是Promise
}

// 正确写法
interface PageProps {
  params: { slug: string[] }; // 改为普通对象类型
}

export default async function Page({ params }: PageProps) {
  // ...
}

三、如何正确忽略错误(仅临时应急)

如果确实需要临时忽略该错误,要确保// @ts-expect-error注释放在错误发生的代码行的上方:

export default async function Page(
  // @ts-expect-error: params type does not match expected PageProps
  { params }: { params: { slug: string[] } }
) {
  // ...
}

注意:注释必须紧邻错误行,否则TypeScript不会识别该注释。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:18