NextJS 15页面组件传参报错:缺失Promise类型相关属性
问题分析与解决
报错"{ locale: string; }" is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag],本质是TypeScript把你的HomePage组件识别成了Promise类型,但它实际是普通函数组件。在Next.js 15里,这大概率是组件的客户端/服务端边界处理不当导致的,以下是具体解决办法:
解决步骤
标记为客户端组件
如果setRequestLocale是客户端侧的API(比如国际化库的客户端方法),你的HomePage必须声明为客户端组件。Next.js 15对组件的端侧区分更严格,未声明会导致类型推断错误。在组件最顶部添加指令:'use client'; // 必须放在组件代码最开头 export default function HomePage( { params: { locale }, }: { params: { locale: string } }, ) { setRequestLocale(locale); return ( <> <Hero locale={locale} /> <main> <MoreAboutUs locale={locale} /> <OurClients /> <Solutions /> <RFID locale={locale} /> <Consultoria /> <Industry4 /> <Contact /> </main> </> ); }检查组件调用方式
确认没有在路由配置或其他代码里把HomePage当作异步函数调用(比如写了await HomePage(...))。普通组件直接在JSX中渲染即可,不需要加await。避免错误的异步组件声明
不要把HomePage定义成异步函数(比如async function HomePage(...)),除非你确实需要在组件内部做异步数据获取。如果不需要异步逻辑,保持普通函数组件的形式。
补充提示
如果用的是next-intl这类国际化工具,Next.js 15的App Router中,服务端组件建议用createIntl初始化国际化,客户端组件再用setRequestLocale,确保端侧边界清晰,避免类型冲突。
内容的提问来源于stack exchange,提问作者Juan π
相关产品推荐
相关产品推荐

