У меня есть компонент, который извлекает информацию о студенте из API после его инициализации. Это код onIniti на моей cmponent-version1
ngOnInit(): void {
if(!this.student) {
this.studentsService.getStudentDetail(this.id).subscribe(
(response: Student) => {
this.student = response;
},
error => console.log(error)
)
}
}
, а вот функция внутри моей student-service-version1
getStudentDetail(id: number): Observable<Student> {
return this.httpClient.get<Student>(`${this.studentsUrl}${id}/`, this.baseService.httpOptions);
}
Все отлично работает. Теперь, только для didacti c цели (я новичок в javascript / typescript), я хотел бы реорганизовать свою службу, чтобы использовать единственную функцию get , которая возвращает список студентов при вызове без параметра и вместо этого возвращать подробную информацию о студенте при вызове с указанным c id. Это student-service-version2
getStudents(id?: number): Observable<Student[]> {
if(id)
return this.httpClient.get<Student[]>(`${this.studentsUrl}${id}/`, this.baseService.httpOptions);
else
return this.httpClient.get<Student[]>(this.studentsUrl, this.baseService.httpOptions);
}
Учитывая, что в сигнатуре моей функции указано, что она возвращает наблюдаемый массив студентов, в моем компоненте мне нужно своего рода приведение типов из Студент [] - Студент . Вот как я это делаю: версия-компонента2
ngOnInit(): void {
if(!this.student) {
this.studentsService.getStudents(this.id).subscribe(
(response: Student[]) => {
this.student = response[0] as Student;
},
error => console.log(error)
)
}
}
Это не работает, поэтому после инициализации student var остается неопределенным. Я не понимаю, почему, мне все кажется правильным (хотя этот рефакторинг - не лучшая идея. Опять же, я просто хочу понять причину ошибки). Я также пробую this.student = response.pop() as Student;
Тот же результат, не работает.