Typescript не может прочитать свойство «получить» неопределенную проблему наследования

#angular #typescript #inheritance

Вопрос:

Я получаю эту ошибку при попытке запустить свой код. У меня есть базовый класс API. Я использую этот базовый базовый метод для всех сервисов, которые я мог бы создать. Затем у меня есть служба прогноза погоды, которая скорее наследует или расширяет этот базовый класс. Я создаю необходимые функции на основе этого, а затем использую свой сервис для реализации функций CRUD для прогнозирования погоды в своих различных компонентах.

АпиБаза

 export class ApiBase
{
  public ID: any;
  forecast: any = [];

  constructor(private http: HttpClient,  private router: ActivatedRoute)
  {
   
  }

  getWeatherForecast(): Observable<any[]>
  {
    return this.http.get<any[]>('API/'   this.constructor.name)
  }
}
 

Прогноз погоды.Обслуживание

 import { ApiBase } from "./ApiBase"

export class WeatherForecast extends ApiBase
{
  
  forecasts: any[];

  get()
  {
    return super.getWeatherForecast()
  }
}
 

Прогноз погоды.Компонент

 import { Component, OnInit } from '@angular/core';
import { WeatherForecast } from 'src/WeatherForecast.service';

@Component({
  selector: 'app-WeatherForecast',
  templateUrl: './WeatherForecast.component.html'
})

export class WeatherForecastComponent implements OnInit
{

  constructor(private service: WeatherForecast) { }

  forecasts: any = [];
  ID = this.forecasts.ID;

  ngOnInit()
  {
    this.refreshWeatherForecastList();
  }

  refreshWeatherForecastList()
  {
    return this.service.get().subscribe(data =>
    {
      this.forecasts = data;
    });;
  }
}
 

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

1. Вы используете @Injectable() аннотации к тем сервисам, которые у вас есть, верно?

Ответ №1:

Я не вижу ничего плохого в наследовании , но, поскольку в сообщении об ошибке указано Cannot read property 'get' of undefined , я предполагаю, что у вашей службы на самом деле нет Injectable аннотации. Таким образом, он нигде не предоставляется в вашем приложении, если вы не предоставляете его «вручную». Вы должны добавить его следующим образом:

 import { ApiBase } from "./ApiBase"

@Injectable({
  providedIn: 'root'
})
export class WeatherForecast extends ApiBase
{
  
  forecasts: any[];

  get()
  {
    return super.getWeatherForecast()
  }
}