带打字稿的云功能,如何定义快照数据的形状?

时间:2018-08-18 09:30:18

标签: typescript firebase google-cloud-functions

在将typescript与firebase函数一起使用时,我遇到了问题,尤其是当我从snapshot.data()获取值时

enter image description here

snapshot本身默认使用firebase键入,但是如何指定返回的data()的形状?

默认情况下,snapshot.data()的类型为DocumentData | undefined,它来自firebase,我需要将其更改为以某种方式成为此特定数据的接口。

2 个答案:

答案 0 :(得分:3)

您有几种语法选择:

interface Foo {
    a: string
    b: number
}

const foo1 = snapshot.data() as Foo  // cast it
const foo2 = <Foo> snapshot.data()   // also cast it

使用这两种方法中的任何一种,您都可以使用对象分解将其字段转换为变量,如您的答案所示:

const { a, b } = foo1   // automatically assign a and b

如果需要,您可以重新定义局部变量:

const { a: my_a, b: my_b } = foo1   // assigns my_a and my_b instead

这完全是TypeScript,实际上与数据库API无关。

答案 1 :(得分:0)

对于遇到相同问题的任何人,解决方案如下

interfacse ICharacterData = {
   username: string,
   race: string,
   skinTone: string,
   gender: string
}

并将其应用于快照数据

const { username, race, skinTone, gender } = <ICharacterData>snapshot.data()