Firebase 在Firestore中,我如何防止;请确保您使用的Firestore类型来自同一NPM包;错误

Firebase 在Firestore中,我如何防止;请确保您使用的Firestore类型来自同一NPM包;错误,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有几个使用Firestore的NPM代码库。一个是客户端,一个是服务器端,我正在尝试将一些代码重构为一个公共依赖代码库。服务器代码库使用firebase admin作为其依赖项,但如果我尝试使用sentinel类型(例如firebase.firestore.Timestamp)设置对象,则会发生以下错误: Please ensure that the Firestore types you are using are from the same NPM package 我可以通过将实例注入我

我有几个使用Firestore的NPM代码库。一个是客户端,一个是服务器端,我正在尝试将一些代码重构为一个公共依赖代码库。服务器代码库使用firebase admin作为其依赖项,但如果我尝试使用sentinel类型(例如firebase.firestore.Timestamp)设置对象,则会发生以下错误:

Please ensure that the Firestore types you are using are from the same NPM package
我可以通过将实例注入我的库代码库来避免混合firestore实现,例如:

import * as admin from "firebase-admin";
const libraryCode = new MyFirestoreLibrary(admin.firestore())
但是,有没有办法在库代码中访问这些sentinel类型


下面是我希望实现的一个示例:

快速问题:您只需要将firebase admin作为一个依赖项,对吗?我相信firebase admin的最新版本现在会为大多数类型导入客户端版本,例如,通常会将它们设置为别名。或者至少我可以从中读到,所以你可能应该调用别名,但如果没有别名,我不能确定。你能提供一个吗?不正确(也许我认为这是可能的)。共享公共库仅导入firebase(而不是firebase admin),因为它在客户端和服务器上都使用。服务器库导入firebase管理员、firebase和共享公共库。是否存在这种设置可能起作用的使用模式?我有一对简单的代码基示例来演示这个问题。看:我刚刚意识到我拼写的是“importanting”而不是importing。那太尴尬了。但是,是的,我担心要在不混合firestore类型的情况下访问sentinel类型,您必须将客户端和管理员的代码分开,这将破坏您希望建立的库代码的目的;而利用这两种方法会导致您当前遇到的错误,或者导致不明确的解决错误(在管理员端时,很可能是因为您已将firebase和(而不是管理员)导入到库中)。我建议在使用admin中的库时键入casting,但它是模糊的OK谢谢。这是否在Firebase团队的功能请求范围内?原因似乎只是依靠中的“instanceof”来检查类型兼容性。在后面的检查中,“isMomentJsType”的测试不使用“instanceof”,因此将允许不同版本的momentjs对象混合使用。为功能请求添加“isFirestoreType”是否可行?我相信会是这样的,请求本身并不是什么稀奇古怪的东西,尽管它可能与预期的功能背道而驰。我确实相信实现“isFirestoreType”检查是可行的,但我不能确认它是否会成功,它可能会导致用户错误和/或意外攻击。尽管如此,我还是鼓励您通过请求,因为Firebase团队可能比我更了解如何实现这一点以及它的可行性。