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

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 π

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:57:18