Clerk类型不匹配问题:useUser()与@clerk/types的UserResource不一致
解决Clerk UserResource类型不匹配问题
问题原因
你的@clerk/nextjs(v4.30.1)与单独安装的@clerk/types(v4.2.0)版本不兼容,导致两个包中的UserResource类型定义不一致——新版本@clerk/nextjs返回的user对象不包含旧版@clerk/types里新增的passkeys、createPasskey属性,触发类型错误。
解决方案
1. 移除单独安装的@clerk/types
@clerk/nextjs已内置匹配版本的@clerk/types,无需单独安装,直接卸载:
npm uninstall @clerk/types # 或使用yarn yarn remove @clerk/types
子组件的类型导入改为从@clerk/nextjs引入:
// 子组件代码 import { UserResource } from "@clerk/nextjs"; type Props = { user: UserResource; }; const Form = ({ user }: Props) => { // ... }
2. 强制同步版本(若必须保留@clerk/types)
如果项目确实需要单独使用@clerk/types,需确保其版本与@clerk/nextjs完全一致:
npm install @clerk/types@4.30.1 # 或使用yarn yarn add @clerk/types@4.30.1
3. 清理依赖缓存并重新安装
缓存可能导致版本不生效,执行以下步骤:
# 删除node_modules和锁文件 rm -rf node_modules package-lock.json # 重新安装依赖 npm install
4. 统一类型导入来源
避免混用不同包的类型,所有Clerk相关类型均从@clerk/nextjs导入,确保类型与运行时API完全匹配。
内容的提问来源于stack exchange,提问作者qublaidev
相关产品推荐
相关产品推荐

