Я пытаюсь преобразовать объект ответа из HTTP-запроса в моем угловом проекте в определенный класс Person
. Я определил универсальный метод post в HTTP-сервисе и вызываю его в моем сервисе person с универсальным значением, замененным на Person
. Итак, я думаю, поскольку я сделал, что HTTP response
должен быть Person
, но это не так - это просто Object
. Мне нужно, чтобы он был Person
, потому что в моем классе Person есть некоторая пользовательская логика, к которой мне нужно получить доступ. Я мог бы написать вспомогательный метод в моем личном сервисе, но я чувствую, что это должно сработать - тем более, что VS Code intellisense говорит, что response
в моем компоненте - Person
, когда я наводю на него указатель мыши.
Вот мой код:
http.service.ts
@Injectable()
export class HttpService {
baseUrl = 'https://baseurl.com';
constructor(private http: HttpClient) { }
post<T>(endpointUrl: string, body: any): Observable<T> {
const fullUrl = this.baseUrl + endpointUrl;
return this.http
.post<T>(fullUrl, body)
.pipe(
map(response => response as T)
);
}
}
person.service.ts
@Injectable()
export class PersonService {
constructor(private httpService: HttpService) { }
newPerson(body: Person): Observable<Person> {
return this.httpService.post<Person>('/people', JSON.stringify(body));
}
}
person.component.ts
@Component({
selector: 'app-person',
templateUrl: './person.component.html',
styleUrls: ['./person.component.css'],
})
export class PersonComponent {
person: Person = new Person();
onSubmit(id: number) {
if (id == 0) {
console.log(this.person); // Person {id: 0, ...
console.log(this.person.constructor.name); // Person
let body = this.person.fromFormGroup(this.formGroup);
this.personService.newPerson(body)
.subscribe(response => { // VS Code intellisense says this: (parameter) response : Person
this.person = response as Person;
console.log(this.person); // {id: 72, ...
console.log(this.person.constructor.name); // Object
// Trying a different way
this.person = <Person>response;
console.log(this.person); // {id: 72, ...
console.log(this.person.constructor.name); // Object
})
}
}
}