使用NextAuth MongoDB适配器遇TypeScript类型不兼容错误求助
代码实现
我使用NextAuth的MongoDB适配器,代码如下:
import NextAuth from "next-auth" import { MongoDBAdapter } from "@auth/mongodb-adapter" import clientPromise from "../../../lib/mongodb" // 此处省略providers配置... export default NextAuth({ providers, adapter: MongoDBAdapter(clientPromise), })
报错信息
英文原文
Type 'Adapter' is not assignable to type 'Adapter | undefined'.
Type 'Adapter' is not assignable to type 'DefaultAdapter & { createVerificationToken: (verificationToken: VerificationToken) => Awaitable<VerificationToken | null | undefined>; useVerificationToken: (params: { ...; }) => Awaitable<...>; }'.
Type 'Adapter' is not assignable to type 'DefaultAdapter'.
Types of property 'createUser' are incompatible.
Type '((user: Omit<AdapterUser, "id">) => Awaitable) | undefined' is not assignable to type '(user: Omit<AdapterUser, "id">) => Awaitable '.
Type 'undefined' is not assignable to type '(user: Omit<AdapterUser, "id">) => Awaitable'.ts(2322)
types.d.ts(106, 5): The expected type comes from property 'adapter' which is declared here on type 'AuthOptions'
(property) AuthOptions.adapter?: Adapter | undefined
You can use the adapter option to pass in your database adapter.Required: No
中文翻译
类型“Adapter”无法分配给类型“Adapter | undefined”。
类型“Adapter”无法分配给类型“DefaultAdapter & { createVerificationToken: (verificationToken: VerificationToken) => Awaitable<VerificationToken | null | undefined>; useVerificationToken: (params: { ...; }) => Awaitable<...>; }”。
类型“Adapter”无法分配给类型“DefaultAdapter”。
属性“createUser”的类型不兼容。
类型“((user: Omit<AdapterUser, "id">) => Awaitable) | undefined”无法分配给类型“(user: Omit<AdapterUser, "id">) => Awaitable ”。
类型“undefined”无法分配给类型“(user: Omit<AdapterUser, "id">) => Awaitable”。ts(2322)
types.d.ts(106, 5): 预期类型来自属性“adapter”,该属性在类型“AuthOptions”上声明
(property) AuthOptions.adapter?: Adapter | undefined
你可以使用adapter选项传入数据库适配器。必填项:否
解决方案
这类报错通常是依赖版本不匹配或类型定义冲突导致的,可尝试以下步骤解决:
- 版本兼容性检查:确保
next-auth和@auth/mongodb-adapter版本一致(优先使用AuthJS v5系列版本,v4与v5的适配器类型定义差异较大) - 重置依赖:删除
node_modules和锁文件后重新安装rm -rf node_modules package-lock.json npm install - 类型断言:如果版本确认无误仍报错,可手动添加类型断言强制适配
import NextAuth from "next-auth" import { MongoDBAdapter } from "@auth/mongodb-adapter" import { Adapter } from "next-auth/adapters" import clientPromise from "../../../lib/mongodb" export default NextAuth({ providers, adapter: MongoDBAdapter(clientPromise) as Adapter, })
内容的提问来源于stack exchange,提问作者Emanuele Paolini

