Тип «Подписка» нельзя назначить типу «Наблюдаемый <Exercise []>» - PullRequest
0 голосов
/ 28 июня 2018

Я использую

Угловой 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);
  }

}

ошибка TS2322: тип «Подписка» нельзя назначить типу «Наблюдаемый».

ошибка TS2339: свойство 'name' не существует для типа '{}'.

ошибка TS2339: свойство 'duration' не существует для типа '{}'.

ошибка TS2339: свойство «калории» не существует для типа «{}».

1 Ответ

0 голосов
/ 28 июня 2018

Сообщение об ошибке очень очевидно. 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);
      });
  }
...