Firebase管理员,数据库位于TypeScript中
我正在使用Firebase的管理SDK。它还提供使用作为管理员 创建的Firebase Admin应用程序的类型定义如下所示:Firebase管理员,数据库位于TypeScript中,typescript,firebase,firebase-realtime-database,firebase-admin,Typescript,Firebase,Firebase Realtime Database,Firebase Admin,我正在使用Firebase的管理SDK。它还提供使用作为管理员 创建的Firebase Admin应用程序的类型定义如下所示: import * as firebaseAdmin from 'firebase-admin'; export type FirebaseContext = { firebaseAdmin: firebaseAdmin.app.App; }; 到目前为止,它运作良好。但是,如果我使用Firebase的时间戳功能,它会抛出一个类型错误: firebaseAdmin
import * as firebaseAdmin from 'firebase-admin';
export type FirebaseContext = {
firebaseAdmin: firebaseAdmin.app.App;
};
到目前为止,它运作良好。但是,如果我使用Firebase的时间戳
功能,它会抛出一个类型错误:
firebaseAdmin.database.ServerValue.TIMESTAMP
// Property 'ServerValue' does not exist on type '(url?: string | undefined) => Database'.ts(2339)
应该说,firebaseAdmin
实例作为一个函数的参数而来,因此在前面定义为FirebaseContext.firebaseAdmin
那么,我之前的类型定义有没有做错什么?因为,如果我不通过函数的参数传递firebase实例,而是直接从其模块导入它,它不会抱怨类型定义。因此,类型FirebaseContext
肯定有问题
感谢您的时间和帮助。据我所知,您正在尝试从
FirebaseApp
实例获取数据库.ServerValue.TIMESTAMP
对象。但该对象实际上是在全局firebase
上定义的,而不是在应用程序实例上定义的。因此,您必须显式导入firebase
/admin
并调用database.ServerValue.TIMESTAMP
,即firebase.database.ServerValue.TIMESTAMP
或admin.database.ServerValue.TIMESTAMP是。我最后就是这么做的。我只是想知道我是否可以对类型做些什么,使它适合在函数中作为参数传递Firebase实例。这不是关于类型强制,而是关于您使用的实际对象。FirebaseApp
实例有一个database()
方法,但没有定义ServerValue.TIMESTAMP
的database
属性。现在我知道了。在Firebase实例上,数据库是一个函数,而在导入的对象上,它不是。谢谢!:)听到这个消息很高兴,罗宾。有时我想知道是否值得将(全局)值与应用程序实例值分开。我们使用的方法可以节省内存,但您肯定不是第一个落入此陷阱的人-/