升级Angular13和Firebase9后报错无导出成员User,应从何处导入?
解决方案
AngularFire 9 对应适配 Firebase 9+ 版本,该版本采用模块化 API 设计,原有全局firebase命名空间下的类型定义已调整位置,不再支持firebase.User这种写法。
兼容层适配方案(你当前使用@angular/fire/compat/*导入路径的场景)
直接从@angular/fire/compat/auth导入User类型即可,兼容层导出的User类型和原有firebase.User结构完全一致,替换后不需要调整后续业务逻辑:
- 替换原有的全局firebase导入,新增类型导入:
// 删掉原有 import * as firebase from 'firebase/app' 这类全局导入 import { User } from '@angular/fire/compat/auth';
- 修改方法参数的类型声明,把
firebase.User替换为导入的User类型:
private createProfile(user: User | null): UserProfile | null { if (!user) { return null; } return { displayName: user.displayName ?? '', email: user.email ?? '', photoURL: user.photoURL ?? '', uid: user.uid, userIncomplete: !user.displayName || !user.email || !user.photoURL, }; }
模块化API适配方案(后续完全弃用compat层的场景)
如果后续你计划迁移到Firebase 9+原生模块化API,不需要用兼容层的话,从firebase/auth直接导入User类型即可:
import { User } from 'firebase/auth';
额外提示
你项目中其他用到firebase命名空间下的Auth相关类型,都可以对应从上述两个导入路径中查找对应类型导入,无需再通过全局firebase命名空间获取类型。
内容的提问来源于stack exchange,提问作者J4N
相关产品推荐
相关产品推荐

