类型“未知”上不存在属性“名称”。ts(2339)

luc*_*cas 6 javascript firebase typescript angular

我正在尝试返回一个具有 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]);
  });
Run Code Online (Sandbox Code Playgroud)

这是我用于练习的界面

export interface Exercise{
  id: string;
  name: string;
  duration: number;
  calories: number;
  date?: Date;
  state?: 'completed' | 'cancelled' | null;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*l D 14

最有可能的是 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']
  });
});
Run Code Online (Sandbox Code Playgroud)

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

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