TypeScript调用firebase.auth()提示auth属性不存在错误如何解决
报错原因
你当前安装的Firebase为v9及以上版本,该版本默认采用模块化API设计,废弃了旧版命名空间式的firebase.auth()调用方式,因此TS类型校验无法识别对应属性。单独安装@firebase/auth-types无法解决问题,因为v9+版本的类型定义已经内置在firebase主包中,额外安装独立类型包反而可能引发类型冲突。
解决方案
方案1:改用新版模块化API(推荐)
直接适配v9+的官方推荐写法,修改firebase.ts代码如下:
import { initializeApp } from "firebase/app"; import { getAuth } from "firebase/auth"; const firebaseConfig = { apiKey: process.env.REACT_APP_FIREBASE_API_KEY, authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN, projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID, storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID, appId: process.env.REACT_APP_FIREBASE_APP_ID } const app = initializeApp(firebaseConfig); export const auth = getAuth(app);
方案2:使用兼容包保留旧写法
如果不想改动现有业务代码的调用逻辑,可以导入compat兼容版本的包,修改导入语句即可:
// 替换原来的导入语句为compat版本 import firebase from 'firebase/compat/app'; import 'firebase/compat/auth'; const firebaseConfig = { apiKey: process.env.REACT_APP_FIREBASE_API_KEY, authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN, projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID, storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID, appId: process.env.REACT_APP_FIREBASE_APP_ID } firebase.initializeApp(firebaseConfig); export const auth = firebase.auth();
后续操作
修改完成后先卸载不需要的独立类型包:npm uninstall @firebase/auth-types
然后重启IDE的TS服务(VSCode按Ctrl+Shift+P选择「TypeScript: Restart TS Server」)即可消除报错。
内容的提问来源于stack exchange,提问作者NoobNewb
相关产品推荐
相关产品推荐

