Firebase Admin SDK 和客户端 Firebase JavaScript SDK 之间的共享文档引用类型

问题描述 投票:0回答:1

在模块化 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
注释,但这非常不幸和恶心。

有什么想法吗?

typescript firebase google-cloud-firestore
1个回答
0
投票

这里没有简单的出口。

创建您自己的 DocumentReference 抽象或包装类型并使用它。 您仍然必须在该抽象中做“不幸和粗俗”的事情,并且这是不可避免的 - 如果没有您所指的任何内容,您就无法安全地使两个不兼容的类型彼此兼容。 但至少会仅限于那个地方。

您可能还必须对使用 DocumentReference 的其他类型进行抽象,例如 CollectionReference。 并且,可能还有其他类型。 到那时,您实际上正在为您想要统一其接口的所有内容实现适配器模式

您还应该预料到您的抽象将来可能会被破坏,因为无法保证每个 SDK 类型中的不同 DocumentReference 类型将继续保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.