gpt4 book ai didi

typescript - 如何在应用程序模型中使用 FieldValue.serverTimestamp

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:08 27 4
gpt4 key购买 nike

在我的 Typescript 应用程序代码中,我定义了一个模型,该模型使用 Firestore 在服务器上生成的时间戳。当文档从数据库返回时,该字段将是一个 ISO 字符串。我想在我的整个应用程序中使用相同的模型定义来写入和读取数据,但这会带来问题。

我通常会这样写:

interface Document {
title: string,
createdAt: string
}

async function addDocument(document: Document): Promise<string> {
const id = await firestore.collection('documents').add(someDocument)
return id
}

async function getDocumentData(documentId: string): Promise<Document> {
const doc = await firestore.collection('documents').doc(documentId).get()

invariant(doc.exists, `No document available with id ${documentId}`)
return doc.data() as Document
}

const someDocument: Document = {
title: "How to",
createdAt: firestore.FieldValue.serverTimestamp()
}

const newDocumentId = await addDocument(someDocument)

现在 Typescript 编译器提示 someDocument 的值不兼容,因为 createdAt 被定义为字符串。

之前,我通过欺骗编译器相信它是一个带有 createdAt: firestore.FieldValue.serverTimestamp() as string 的字符串来解决这个问题。

随着最近对 Typescript 的更新,这种容忍度似乎随着我使用的严格设置而消失了。编译器现在告诉我:

Type 'FieldValue' cannot be converted to type 'string'.

我想知道处理这个问题的正确方法是什么,而不是再次绕过编译器?

-- 编辑--

由于 Firestore 时间戳行为即将发生变化,我再次查看此内容,我发现该 API 实际上并未返回 ISO 字符串,而是返回 Date 对象。因为 Date 对象具有自动字符串转换功能,所以我的代码始终有效,但从这个意义上讲,类型定义是不正确的。不过,这对我最初的问题并没有太大改变。

最佳答案

Firebase 的新行为将从数据库方法返回 Timestamp 对象,而不是 Date 对象。

在我的类型定义文件中,我现在导入 Timestamp 类型(为此你需要 Typescript 2.9),然后像这样在我的模型中使用它:

export type FirestoreTimestamp = import("firebase").firestore.Timestamp;

export interface LockableItem {
isLocked: boolean;
lockedBy?: UserId;
lockedAt?: FirestoreTimestamp;
}

当使用 FieldValue 设置 lockedAt 字段时,您现在可以简单地执行以下操作:

const item: LockableItem = { 
isLocked: true,
lockedAt: FieldValue.serverTimestamp() as FirestoreTimestamp,
lockedBy: "someuser"
}

关于typescript - 如何在应用程序模型中使用 FieldValue.serverTimestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com