首页 > 解决方案 > “未知”类型上不存在属性“id/name/duration/calories”

问题描述

import { NgForm } from '@angular/forms';
import { Exercise } from './../exercise.model';
import { TrainingService } from './../training.service';
import { Component, OnInit, ViewChild } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';
import { Observable, Subscriber } from 'rxjs';
import 'rxjs/add/operator/map';

@Component({
  selector: 'app-new-training',
  templateUrl: './new-training.component.html',
  styleUrls: ['./new-training.component.css'],
})
export class NewTrainingComponent implements OnInit {
  exercises: Observable<Exercise[]>;

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

  ngOnInit(): void {
    this.exercises = this.db
      .collection('availableExercises')
      .snapshotChanges()
      .map((docArray) => {
        return docArray.map((doc) => {
          return {
            id: doc.payload.doc.data().id,
            name: doc.payload.doc.data().name,
            duration: doc.payload.doc.data().duration,
            calories: doc.payload.doc.data().calories,
          };
        });
      });
  }

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

id、姓名、持续时间和卡路里有问题。它们都带有下划线,错误提示:所有四个类型的“未知”类型都不存在属性。所以不确定是什么问题。我也试过

id: doc.payload.doc['id'],
name: doc.payload.doc['name'],
duration: doc.payload.doc['duration'],
calories: doc.payload.doc['calories'],

也不行。在 Maximilian Schwarzmuller 的教程之后重复。会给予任何帮助。

标签: javascriptangularfirebasegoogle-cloud-firestore

解决方案


答案是将函数的下一行ngOnInit从:

        return docArray.map((doc) => {

进入:

        return docArray.map((doc: any) => {

这将允许您在编译期间避免类型检查。正如这里提到的


推荐阅读