以下是我很常见的情况:
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语句来解决此问题
答案 0 :(得分:1)
您已经确切地确定了您应该做的事情-return doc.data() as SomeDocument
。 TypeScript不会允许一件事简单地变成另一件事,而这自然不是其继承或实现的接口的一部分。在这种情况下,必须明确说明要强制转换类型。从TypeScript的角度来看,访问exists
属性不会改变情况。