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

使用Next-auth v5.0.0-beta.5时Session回调出现TypeScript类型错误

解决NextAuth v5.0.0-beta.5 Session回调TypeScript类型错误

问题根源

NextAuth v5的类型扩展机制和v4完全不同,你沿用v4的declare module扩展方式会导致类型不兼容,另外代码里还有两处细节问题:

  1. 自定义User接口覆盖了默认类型,引发类型冲突
  2. Session中的expires类型未正确定义(默认应为string,你使用的DateTime未导入或声明)

修正步骤

1. 调整类型扩展文件(auth.d.ts)

替换原有扩展代码为v5兼容写法,通过交叉类型扩展默认类型,避免覆盖冲突:

import type { DefaultSession, DefaultJWT } from "next-auth";

// 扩展Session类型
declare module "next-auth" {
  interface Session extends DefaultSession {
    user: DefaultSession["user"] & {
      accessToken?: string;
      department?: string;
      jobTitle?: string;
      companyName?: string;
    };
    // v5默认expires为string类型,若你需要DateTime需自行导入对应库(如luxon)并声明
    expires: string;
  }
}

// 扩展JWT类型
declare module "next-auth/jwt" {
  interface JWT extends DefaultJWT {
    accessToken?: string;
    department?: string;
    jobTitle?: string;
    companyName?: string;
  }
}

2. 确保类型文件被TypeScript识别

检查tsconfig.json的include数组,确保auth.d.ts在其中:

{
  "include": ["auth.d.ts", "**/*.ts", "**/*.tsx"]
}

3. 简化Session回调的类型声明

v5会自动推断回调参数类型,也可显式导入正确类型:

import type { Session, JWT } from "next-auth";

// 在auth配置的session回调中
async session({ session, token }: { session: Session; token: JWT }) {
  session.user.accessToken = token.accessToken || "";
  session.user.department = token.department || "";
  session.user.companyName = token.companyName || "";
  session.user.jobTitle = token.jobTitle || "";
  return session;
},

额外说明

  • 不要重新定义User接口,直接扩展DefaultSession["user"]即可保留默认类型的同时添加自定义字段
  • 若坚持使用DateTime类型,需安装对应库(如luxon)并在auth.d.ts中导入:import type { DateTime } from "luxon";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:00:04