Как исправить ошибку "свойство не существует по типу"?
Я следую этому видео уроку ( текстовая версия того же самого). Я следовал точно такой же код, и я получаю эту ошибку:
ошибка 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
,
Я не могу решить ошибку, ни понять, что является причиной этой ошибки.
7 ответов
Обычно это происходит при разработке приложений Angular. Чтобы решить эту проблему, просто выключите сервер и запустите его снова:
$ ng serve
Это происходит потому, что когда вы запускаете свой сервер, ваше приложение фактически представляет собой сумму пакетов, хранящихся в вашем хранилище. Когда вы вносите изменения в свой код, иногда эти изменения не сохраняются в вашем хранилище, что приводит к тому, что сервер все еще использует старые пакеты.
Если вы хотите избежать предупреждения компиляции, то грязное исправление было бы сделать
employees: any[];
любые экземпляры позволяют любому методу вызывать любой метод этого объекта. Это позволит избежать предупреждения компиляции, но это не безопасно во время выполнения.
Вы должны быть осторожны, прежде чем использовать его. Если вы уверены, что метод будет доступен во время выполнения, используйте только его.
Если все вышеперечисленное отмечено, отметьте
constructor(private _employeeService: EmployeeService) { }
private, спецификатор доступа есть. Та же проблема возникнет, если пропущен спецификатор доступа.
Я бы также подписался на метод службы вместо того, чтобы сохранять его с другим значением в ngOnInit()
:
ngOnInit() {
this.employees = this._EmployeeService.getEmployees();
}
Что-то вроде:
ngOnInit(){
this.getEmployees()
}
private getEmployees(): void {
this._EmployeeService.getEmployees()
.subscribe(fetchedEmployees = > this.employees = fetchedEmployees)
}
Иногда файлы не сохраняются .. Итак, сохраните все файлы Или вы можете закрыть все файлы (вам будет предложено сохранить ..) и построить заново .. у меня сработало ..
Используйте статическое ключевое слово в объявлении метода:
public static getEmployees(): any []{
}
Если вы используете команду
ng serve
командовать и добиваться успеха.
Затем используйте команду
ng build --prod
faild, и intellisense верен.
У вас могут возникнуть проблемы с исходным кодом.
исходный код есть не только в, но и в; Итак, вам нужно изменить
className.prod.ts
нравиться
className.ts
.