【问题标题】:Angular / Firebase / Typescript Interfaces - How to manage interface type of firebase.firestore.FieldValue with toDate()Angular / Firebase / Typescript 接口 - 如何使用 toDate() 管理 firebase.firestore.FieldValue 的接口类型
【发布时间】:2020-07-06 15:30:14
【问题描述】:

我有一个界面,其中日期设置为使用 Firestore 时间戳。

    export interface Album{      
        album_name: string,
        album_date: firebase.firestore.FieldValue;
    }

如果我想添加一个新项目,这非常好

    this.albumsCollection.add({
        album_name: "My Album",
        album_date: firebase.firestore.FieldValue.serverTimestamp(),
     })

从 firestore 获取相册文档

但是,在从 firestore 检索专辑 Document 时,如果我排除 album_date,下面的代码将正常工作。但是,我正在尝试使用 toDate 以便它出现在 Angular Material Date Picker 中

  public getAlbum(): Observable<Album> {
    this.itemDoc = this.afs.doc<Album>(`albums/1`);
    return this.itemDoc.snapshotChanges()
      .pipe(map(collectionDoc => {
        const data = collectionDoc.payload.data();
        return {
          ...data,
          album_date: (data.album_date as firebase.firestore.Timestamp).toDate(),
        } as Inspection;
      }),
        shareReplay()
      );
  }

上线收到的错误:album_date: (data.album_date as firebase.firestore.Timestamp).toDate(),如下:

类型转换'{专辑_日期:日期; }' 键入“Album”可能是一个错误,因为这两种类型都没有与另一种充分重叠。如果这是故意的,请先将表达式转换为“未知”。 属性“album”_date 的类型不兼容。 “日期”类型中缺少属性“isEqual”,但在“字段值”类型中是必需的。

当接口也配置为 firestore 时,在返回的 firestore 时间戳上使用“toDate”进行管理的最佳方法是什么?

【问题讨论】:

    标签: angular typescript date google-cloud-firestore interface


    【解决方案1】:

    至少有两种方法可以管理此问题。由于寻求意见的问题对于 Stack Overflow 来说是题外话,您可以自行决定哪一个最适合您的情况。

    您可以有两种不同的相册界面,一种用于阅读,一种用于书写。写入的可以使用FieldValue类型,读取的可以使用Timestamp类型。

    您也可以使用TypeScript's union type 表示album_date 可以是FieldValue 或Timestamp。

    album_date: firebase.firestore.FieldValue | firebase.firestore.Timestamp
    

    这应该允许您根据需要转换单个字段。

    【讨论】:

    • 谢谢道格! - 我还必须添加| Date 来处理材料选择器的toDate 转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2016-10-05
    • 1970-01-01
    • 2019-04-27
    • 2017-05-28
    • 2021-07-31
    相关资源
    最近更新 更多