TypeScript报错TS2339:Reference类型上不存在属性'get'如何解决?
解决TypeScript报错:Property 'get' does not exist on type 'Reference'. TS2339
错误原因
该报错是因为你当前使用的Firebase Realtime Database SDK版本、类型定义与你写的API不匹配:get() 方法不是所有版本的Firebase数据库Reference实例都支持的API。
对应解决方案
根据你使用的SDK版本选择对应修改方式:
方案1:使用v8及更早版本的命名空间风格SDK
v8及更早版本的Realtime Database没有Reference.get()方法,需要替换为once('value')获取一次性节点数据,仅修改报错行即可,其余逻辑不需要改动:
// 把原来的报错行替换为下面这行 const roomRef = await database.ref(`rooms/${roomCode}`).once('value');
替换后exists()、val()方法都可以正常调用。
方案2:使用v9及以上版本的SDK
v9版本默认提供模块化API,不支持database.ref()这种命名空间风格的写法,需要调整导入和调用逻辑:
- 首先导入对应模块化方法
import { getDatabase, ref, get } from "firebase/database";
- 调整获取数据的逻辑
const db = getDatabase(); const roomRef = ref(db, `rooms/${roomCode}`); const roomSnapshot = await get(roomRef); // 后续的exists()、val()调用无需修改,直接用roomSnapshot调用即可
如果你想在v9版本继续沿用老的命名空间写法,需要切换为compat兼容包:
- 导入时使用compat路径:
import firebase from 'firebase/compat/app'; import 'firebase/compat/database'; - 安装匹配的类型定义,确保类型识别正常
额外排查项
如果版本匹配仍报错,可删除node_modules文件夹、package-lock.json/yarn.lock文件后重新执行依赖安装,清除类型缓存即可解决。
内容的提问来源于stack exchange,提问作者Joao Pedro Vieira
相关产品推荐
相关产品推荐

