【问题标题】:How to specify the type of a var mid-statement如何指定 var mid-statement 的类型
【发布时间】:2021-10-25 03:35:53
【问题描述】:

我曾经在我的代码中有这一行:

let initialPayload = this.db.list("/members").snapshotChanges() as Observable<any[]>

改为这一行:

let initialPayload = this.db.list("/members").snapshotChanges()
.pipe(map(actions => actions.map(a => ({ key: a.payload.doc.id, data: a.payload.doc.data() }) )));

但是,在第二行中,我收到一个错误: 类型 DatabaseSnapshot&lt;unknown&gt; 上不存在属性“doc”

我怀疑这个错误的解决方案是从初始代码中恢复as Observable&lt;any[]&gt;。但我不知道如何将其添加到第二行。应该这样(?):

let initialPayload = this.db.list("/members").snapshotChanges()
.pipe(map(actions => actions.map(a => ({ key: a.payload.doc.id, data: a.payload.doc.data() }) ))) as Observable<any[]>

-?

如果是这样,那么我的怀疑是错误的(因为在最后添加后错误仍然存​​在)。但我需要确保我已正确添加它,因此我将不胜感激。

另外,既然您已经阅读了这么多,也欢迎您回答这个问题: Error: Property 'doc' does not exist on type 'DatabaseSnapshot<unknown>'

【问题讨论】:

    标签: angular typescript firebase


    【解决方案1】:

    解决了。它与类型无关。这可能是因为我依赖于与firebase firestore相关的代码,而我实际上在我的项目中使用了firebase reraltime数据库。

    我因为doc 而得到的错误是通过简单地删除它并使用正确的变量来解决的,例如:

    let initialPayload = this.db.list("/members").snapshotChanges()
    .pipe(map(actions => actions.map(a => ({ key: a.payload.key, data: a.payload.val() }) ))) as Observable<any[]>
    

    【讨论】:

      【解决方案2】:

      听起来像as 关键字,类似于演员表。 a as T 会将 a 视为类型 T

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2016-03-20
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多