【问题标题】:Im getting an error "Spread types may only be created from object types.ts(2698)"我收到一个错误“传播类型只能从对象 types.ts(2698) 创建”
【发布时间】:2020-06-10 17:59:22
【问题描述】:
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class FirestoreDbService {

  constructor(private db: AngularFirestore) { }

  getBuildList() {
    // return this.db.collection('Builds').valueChanges();
    return this.db.collection('Builds').snapshotChanges().pipe(
      map(docArray => {
        return docArray.map(doc => {
          console.log('==', doc.payload.doc.id);
          console.log('$==$', doc.payload.doc.data());
          return{
            id: doc.payload.doc.id,
            ... doc.payload.doc.data()
          }
        })
      })
    )
  }
}

在最后一行我得到了错误。我认为这与打字稿有关。任何帮助表示赞赏

【问题讨论】:

  • 检查doc.payload.doc.data()的返回类型。它不是或不总是一个对象,所以 typescript 确定你不能安全地传播。

标签: angular typescript firebase google-cloud-firestore


【解决方案1】:

使用as 关键字:

... doc.payload.doc.data() as {} 

这将告诉编译器将doc.payload.doc.data() 视为一个对象。

【讨论】:

  • 这是因为严格吗?为什么打字稿会让我们作弊?
  • 我能够通过这个答案摆脱同样的错误。就我而言,我正在将功能组件转换为基于类的组件。谢谢!
  • @kvicera 没问题!
猜你喜欢
  • 2021-12-31
  • 2020-08-02
  • 2018-07-21
  • 1970-01-01
  • 2019-09-10
  • 2021-08-02
  • 2018-12-13
  • 2017-12-29
相关资源
最近更新 更多