【问题标题】:Property 'name' does not exist on type 'unknown'.ts(2339)类型“未知”.ts(2339) 上不存在属性“名称”
【发布时间】:2020-08-29 19:53:20
【问题描述】:

我正在尝试返回一个具有 name 属性的新对象。但它一直给我这个错误,但代码编译没有任何问题。我正在使用 Angular 9AnfularFirestore 来访问 Firebase

this.db
  .collection('availableExercises')
  .snapshotChanges()
  .pipe(
    map(docArray => {
        return docArray.map(doc => {
            return {
                id: doc.payload.doc.id,
                name: doc.payload.doc.data().name,
                duration: doc.payload.doc.data().duration,
                calories: doc.payload.doc.data().calories
            };
        });
    })
  ).subscribe((exercises: Exercise[]) => {
      this.availableExercises = exercises;
      this.exercisesChanged.next([...this.availableExercises]);
  });

这是我用于Exercise

的界面
export interface Exercise{
  id: string;
  name: string;
  duration: number;
  calories: number;
  date?: Date;
  state?: 'completed' | 'cancelled' | null;
}

【问题讨论】:

  • 独立的map 功能是什么? 您提到的错误在哪里
  • map inside pipe 是 RxJS map 运算符
  • 你是如何导入 Exercise 的?在 name: doc.payload.doc.data().name, 上到底出错了哪一行?

标签: javascript angular typescript firebase


【解决方案1】:

很可能是 TS Lint 错误。一种解决方法是使用方括号而不是点运算符来访问属性。试试下面的

return docArray.map(doc => {
  return ({
    id: doc.payload.doc['id'],
    name: doc.payload.doc.data()['name'],
    duration: doc.payload.doc.data()['duration'],
    calories: doc.payload.doc.data()['calories']
  });
});

如果仍然出现错误,请尝试在访问链上替换点运算符。

尽管如此,无论这个错误如何,生成的 JS 都应该是有效的。

【讨论】:

  • 成功了!就像我说的,它正在编译,但是哪个属性有错误。但是错误消失了。谢谢!
猜你喜欢
  • 2021-01-10
  • 2021-03-08
  • 2019-08-11
  • 2021-08-02
  • 2020-06-02
  • 2022-07-09
  • 2022-10-04
  • 2023-02-07
  • 2022-11-30
相关资源
最近更新 更多