Новичок в Angular, выдает ошибку, что мои переменные не определены, даже если они отображаются?

#angular

#angular

Вопрос:

Я получаю ошибку в моем VSCode, хотя моя страница, кажется, работает правильно. Я предполагаю, что я делаю что-то неправильно, хотя все работает.

Я пытаюсь поместить объекты в новый массив вне моей функции ngOnInit, а затем использовать этот массив в моем компоненте с циклом * ngFor. Однако в моем компоненте я получаю сообщение об ошибке «Идентификатор ‘time’ не определен. «не содержит такого элемента». В моих переменных.

Я предполагаю, что это как-то связано с жизненным циклом событий, возможно, в то время, когда информации там нет?

В любом случае, вот код, с которым я работаю:

 import { Component, OnInit, OnDestroy } from '@angular/core';
import { WeatherService } from '../weather.service';
import { Subscription } from 'rxjs';
import * as moment from 'moment';
import { _ } from 'underscore';

@Component({
  selector: 'app-forecast',
  templateUrl: './forecast.component.html',
  styleUrls: ['./forecast.component.css']
})
export class ForecastComponent implements OnInit, OnDestroy {

  private weatherSub: Subscription;

  constructor(public weatherService: WeatherService) { }

  daysOfWeek = [];


  ngOnInit() {
    this.weatherSub = this.weatherService.getWeatherListener()
    .subscribe((weather: any) => {
      const daysOfWeekData = weather.weekData.data;
      const slicedDaysOfWeek = daysOfWeekData.slice(1, 6);
      _.each(slicedDaysOfWeek, (day) => {
        const days = moment.unix(day.time).format('dddd');
        day.time = days;
        this.daysOfWeek.push(day);
      });
    });
  }
}
  

Вот код компонента:

 <div class="forecast-container">
  <div
  *ngFor="let day of daysOfWeek"
  class="day-container"
  >
    <p>{{day.time}}</p>
    <i class="wi wi-showers"></i>
    <p>{{day.apparentTemperatureHigh}}</p>
    <p>{{day.apparentTemperatureLow}}</p>
  </div>
</div>
  

Как вы можете видеть, код работает, поскольку я получаю данные о погоде. Однако эта ошибка меня пугает.
введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Есть предложения?

Комментарии:

1. Рассматривали ли вы возможность создания интерфейсов / классов для представления ожидаемых данных и манипулирования ими вместо использования any ?

2. @AlexanderStaroselsky нет, я не рассматривал это, решит ли это ошибку?

3. Вы пробовали put daysOfWeek = []; в constructor?

4. @Sebastianor Нет, я этого не делал, это правильный способ сделать это?

5. Я бы действительно рекомендовал создавать интерфейсы / классы для использования вместо any . Это не только обеспечит преимущества набора текста и автозаполнение TypeScript. Вам не нужно перемещать это в конструктор. Если вы объявите в конструкторе, вы не сможете использовать его в другом месте. Также можете ли вы поделиться точной ошибкой, обновите свой вопрос с этим?

Ответ №1:

Typescript должен знать тип массива

 public daysOfWeek: any[] = [];
  

или

 interface Day {
  time: string;
  apparentTempertureHight: number;
  apparentTempertureLow: number;
}
  

затем

 public daysOfWeek: Day[] = [];
  

Комментарии:

1. Я все еще получаю ошибку VSCode с первой.

2. В зависимости от ваших расширений tsconfig s и VSCode any может быть недостаточно конкретным. Я не видел этой ошибки о ‘<anonymous>’, Вам нужно опубликовать более полный проект для дублирования.