javascript - 类型 'Subscription' 不可分配给类型 'Observable<Exercise[]>'

标签 javascript angular typescript rxjs6

我用

Angular CLI:6.0.8

节点:8.11.3

我刚刚学习了 Udemy - Angular(完整应用程序)以及 Angular Material、Angularfire 和 NgRx。 在第 72 课上聆听值变化 (of_Firestore) 我有一个错误

export class NewTrainingComponent implements OnInit {
  exercises: Observable<Exercise[]>;

  constructor(
    private trainingService: TrainingService,
    private db: AngularFirestore) { }

  ngOnInit() {
    this.exercises = 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(result => {
        console.log(result);
      });
  }

  onStartTraining(form: NgForm) {
    this.trainingService.startExercise(form.value.exercise);
  }

}

error TS2322: Type 'Subscription' is not assignable to type 'Observable'.

error TS2339: Property 'name' does not exist on type '{}'.

error TS2339: Property 'duration' does not exist on type '{}'.

error TS2339: Property 'calories' does not exist on type '{}'.

最佳答案

错误信息非常明显。 exercises 是您定义的一种 Observable:

exercises: Observable<Exercise[]>;

但是您在 ngOnInit() 方法中将其分配给订阅。

你的 ngOnInit() 方法应该像下面这样(不要对 exercises 赋值):

ngOnInit() {
    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(result => {
        console.log(result);
      });
  }

关于javascript - 类型 'Subscription' 不可分配给类型 'Observable<Exercise[]>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074018/

相关文章:

javascript - 正则表达式与 JavaScript

javascript - JS : Why isn't this variable available to the other functions?

javascript - Spring应用程序在登录后调用最后一个ajax调用

javascript - 从 JS 迁移,tsc 构建中的错误

javascript - CMS使用jquery 1.7,主题使用jQuery 1.6 ==冲突

angular - 开发 Angular 应用程序时应该使用 Docker 吗?

javascript - 无法将 ViewController 导入 Ionic 2 中的 Provider

Angular 6 - 如何根据变量的值注册不同的路由

reactjs - 我的测试无法与带有 typescript 的 react 测试库一起使用

typescript - 如何使用通用对象和键类型作为字典中的键