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