首页 > 解决方案 > React Native 客户端和管理节点服务器上的 FirebaseFirestore.Timestamp 与 firebase.firestore.Timestamp

问题描述

我正在尝试解决一个看起来应该很容易解决的问题,但我在文档中找不到任何关于它的内容,而且似乎没有任何关于它的问题。

我正在使用 React Native 构建一个应用程序,我们在其中创建与该应用程序相关的各种文档,并将这些文档发送到运行 Express 服务器的 Firebase 函数,该服务器使用 node@10 的 Admin SDK 连接到 Firestore。我的问题是试图找到一些合理的方式来表示日期,而不必每次都来回转换所有内容,因为我的文档/子文档中有很多日期字段。import * as firebase from firebase我在这里初始化 react native firebase 连接firebase.initializeApp(...config)。此库的 Timestamp 对象的类型为firebase.firestore.Timestamp。同时,在我的服务器上,我使用import * as admin from 'firebase-admin'admin.initializeApp(credential, ...config). 在这里,Timestamp 的类型是 FirebaseFirestore.Timestamp,并且来自 google-api 库,而不是 firestore 库。然后,当我将具有这种类型的对象从服务器发送到客户端时,或者相反,打字稿编译失败,因为这两种类型不兼容。

我最近尝试这样做是使用该Date对象,但是当我将其发送到 Firestore 时,它​​会自动将其转换为一个FirebaseFirestore.Timestamp对象,这使我回到了我最初的问题,即在我输入检查之前不想手动转换每个对象(在 REST API 的每一端)。

关于如何解决此问题的任何提示或提示?我知道我在这里没有可重现的示例,但我并不真正认为需要它,因为它更多的是类型问题而不是实际编程。

谢谢你的帮助!

(因此我也不能使用@firebase/testing's initializeTestApp(),因为 FirebaseFirestore.Firestore 和 firebase.firestore.Firestore 是两种不同的类型,我不知道这是否与此错误属于同一类别。)

标签: typescriptfirebasereact-nativegoogle-cloud-firestoretimestamp

解决方案


这个问题的答案和我希望的一样简单(害怕)。我只是在一个单独的地方定义了我的接口,并希望这些类型能够合作,但是相反,我需要为不同的类型声明两个单独的接口Timestamp

客户端:

TimestampedValue.ts

import * as firebase from 'firebase';
export interface TimestampedValue {
    value: string;
    time: firebase.firestore.Timestamp;
}

服务器端: Timestampedvalue.ts

import * as admin from 'firebase-admin';
export interface TimestampedValue {
    value: string;
    time: admin.firestore.Timestamp;
}

这至少对我有帮助!


推荐阅读