在模块化 firebase v9 版本之前,
DocumentReference
中的 firebase
和 firebase-admin
包是兼容的。现在情况已不再是这样,这意味着当我尝试在客户端和 Node.js 管理环境中使用共享模型时,它们现在会导致类型错误。示例:
import type { DocumentReference } from "firebase/firestore";
type Profile = {
name: string;
ref: DocumentReference;
}
如果
DocumentReference
来自客户端 sdk,当我尝试在服务器端管理环境中创建使用 Profile
的 admin.firestore.DocumentReference
模型时,我会收到如下错误:
类型“DocumentReference
”缺少类型“DocumentReference ”中的以下属性:转换器、类型
我一直在使用类型断言和
@ts-expect-error
注释,但这非常不幸和恶心。
有什么想法吗?
这里没有简单的出口。
创建您自己的 DocumentReference 抽象或包装类型并使用它。 您仍然必须在该抽象中做“不幸和粗俗”的事情,并且这是不可避免的 - 如果没有您所指的任何内容,您就无法安全地使两个不兼容的类型彼此兼容。 但至少会仅限于那个地方。
您可能还必须对使用 DocumentReference 的其他类型进行抽象,例如 CollectionReference。 并且,可能还有其他类型。 到那时,您实际上正在为您想要统一其接口的所有内容实现适配器模式。
您还应该预料到您的抽象将来可能会被破坏,因为无法保证每个 SDK 类型中的不同 DocumentReference 类型将继续保持不变。