Как исправить ошибку "свойство не существует при ошибке типа"?

Я следую этому видео уроку (текстовая версия того же самого). Я следовал точно такой же код, и я получаю эту ошибку:

ошибка TS2339: свойство 'getEmployees' не существует для типа 'EmployeeService'

Я посмотрел в Интернете и посетил много вопросов о переполнении стека, таких как этот, этот, этот и этот, и так много других открытых вопросов, связанных с этой ошибкой на GitHub.

Обслуживание:

//import statements go here ...

@Injectable()
export class EmployeeService {
private listEmployees: Employee[] = [
    {
      //just to avoid longer code, deleted dummy data.
    },
  ];

  getEmployees(): Employee[] {
      return this.listEmployees; //ERROR in src/app/employees/list-employees.component.ts(14,44)
  }
}

Класс компонента:

//import statements
@Component({
    selector: 'app-list-employees',
    templateUrl: './list-employees.component.html',
    styleUrls: ['./list-employees.component.css']
})
export class ListEmployeesComponent implements OnInit {
    employees: Employee[];
    constructor(private _EmployeeService: EmployeeService) { }

    ngOnInit() {
        this.employees = this._EmployeeService.getEmployees();
    }

}

Я импортировал сервис в app.module.ts и добавил его в массив провайдеров ngModule.

Я не могу решить ошибку, ни понять, что является причиной этой ошибки.

Ответ 1

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

$ ng serve 

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

Ответ 2

Если вы хотите избежать предупреждения о компиляции, тогда грязное исправление будет заключаться в том, чтобы сделать

employees: any[];

любые экземпляры позволяют любому методу вызывать любой метод для этого объекта. Это позволит избежать предупреждения о компиляции, но это не безопасно.

Вы должны быть осторожны, прежде чем использовать его. Если вы уверены, что этот метод будет доступен во время выполнения, используйте его только.

Ответ 3

Я также подписался бы на метод обслуживания вместо сохранения его в другом значении в ngOnInit():

ngOnInit() {
    this.employees = this._EmployeeService.getEmployees();
}

Что-то вроде:

ngOnInit(){
   this.getEmployees()
}

private getEmployees(): void {
    this._EmployeeService.getEmployees()
        .subscribe(fetchedEmployees = > this.employees = fetchedEmployees)
}

Ответ 4

Используйте ключевое слово static в объявлении метода:

 public static getEmployees(): any []{

}