代码之家  ›  专栏  ›  技术社区  ›  devth

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

  •  0
  • devth  · 技术社区  · 5 月前

    在模块化firebase v9发布之前, DocumentReference firebase firebase-admin 软件包是兼容的。现在情况已不再如此,这意味着当我尝试在客户端和node.js管理环境中使用共享模型时,它们会导致类型错误。例子:

    import type { DocumentReference } from "firebase/firestore";
    
    type Profile = {
      name: string;
      ref: DocumentReference;
    }
    

    如果 文件参考 是从客户端sdk,当我尝试创建一个 Profile 服务器端管理环境中的模型,它使用 admin.firestore.DocumentReference ,我会得到一个错误,比如:

    键入“文档参考”<DocumentData,DocumentData>'类型“DocumentReference”缺少以下属性;DocumentData,DocumentData>':转换器,类型

    我一直在使用类型断言 @ts-expect-error 注释,但这是非常不幸和恶心的。

    有什么想法吗?

    1 回复  |  直到 5 月前
        1
  •  1
  •   Doug Stevenson    5 月前

    这里没有容易的出口。

    创建自己的DocumentReference抽象或包装器类型,并使用它。你仍然必须在抽象中做“不幸和恶心”的事情,这是不可避免的——如果没有你所指的任何东西,你就无法安全地使两个不兼容的类型相互兼容。但至少它将仅限于这一个地方。

    您可能还必须为使用DocumentReference的其他类型(如CollectionReference)进行抽象。也可能是其他类型。到那时,您基本上已经实现了 adapter patterns 对于所有你想统一界面的东西。

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