Как исправить ошибку "свойство не существует при ошибке типа"?
Я следую этому видео уроку (текстовая версия того же самого). Я следовал точно такой же код, и я получаю эту ошибку:
ошибка 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 []{
}