如何从Firestore DocumentSnapshot获取类型推断

时间:2019-01-28 19:32:00

标签: typescript google-cloud-firestore

以下是我很常见的情况:

type SomeDocument = {
  foo: string;
};

export async function getSomeDocument(): Promise<SomeDocument> {
  const doc = await db
    .collection("some")
    .doc("document")
    .get();

  if (!doc.exists) throw new Error("Missing some document");

  return doc.data();
}

Typescript不允许这样做,因为doc.data()返回类型为DocumentSnapshot | undefined。由于某种原因,我觉得Typescript应该能够知道doc.data()将返回DocumentSnapshot,因为它前面的doc.exists检查。

在当前版本的Typescript中使用正确的类型注释是否可以?

我目前通过使用as SomeDocument投射return语句来解决此问题

1 个答案:

答案 0 :(得分:1)

您已经确切地确定了您应该做的事情-return doc.data() as SomeDocument。 TypeScript不会允许一件事简单地变成另一件事,而这自然不是其继承或实现的接口的一部分。在这种情况下,必须明确说明要强制转换类型。从TypeScript的角度来看,访问exists属性不会改变情况。