使用打字稿界面来表示来自 Firebase 的结构化数据?

Posted

技术标签:

【中文标题】使用打字稿界面来表示来自 Firebase 的结构化数据?【英文标题】:Using an typescript interface to represent structured data from Firebase? 【发布时间】:2021-10-09 02:54:23 【问题描述】:

为了在我的 Angular 应用程序和 RealTimeDb 之间传递数据,我喜欢创建一个接口,我可以将实时 DB 返回的对象转换为特定接口,以帮助实现一致性和代码完成等。

在读取对象“类似地图”的结构时,像这样,

 family: 
    name: Morgan,       
    children: 
        Jack : 22
        Tara : 27
    
 

我尝试使用带有地图类型的接口,例如

     interface Family 
        name: string;
        children: Map<string, number>
     

我可以将数据库中的数据读入一个对象,该对象似乎某种符合带有声明的接口`

 let data = ref.get()
 let family = <Family>(await data).val();

family.children 实际上不是地图,(因此没有 .get() 函数),它是一个对象,而且,我也无法更改地图并将整个内容写回数据库。 如果我使用 set,则 .children 将完全被忽略。

想知道如何使用会打扰读写结构化数据的接口来表示 firebase 数据?

【问题讨论】:

【参考方案1】:

但 family.children 实际上并不是地图,(因此没有 .get() 函数),它是一个对象

你是对的,它是一个对象。所以你需要一个更好的类型来表示children

我会推荐Record&lt;string, number&gt;

如果您需要Map,您需要创建一个映射并将所有键/值从子级插入其中。

【讨论】:

以上是关于使用打字稿界面来表示来自 Firebase 的结构化数据?的主要内容,如果未能解决你的问题,请参考以下文章

来自数组类型的打字稿接口

通过打字稿的界面来反应状态[重复]

Cloud Functions Firebase CLI 预部署错误(打字稿)

使用打字稿在 Firebase Cloud 函数中动态导入类的正确方法是啥?

观察更改打字稿的firebase数据库

如何将firebase REST API响应转换为打字稿中的数组?