Тип кастинга в Observable в Angular 8 - PullRequest
0 голосов
/ 31 марта 2020

Привет, я учусь Angular 8, и как ученик у меня много сомнений. Я разделяю одно из моих сомнений в деталях. Я надеюсь, что некоторые из вас могут легко помочь и исправить меня.

У меня есть служба, которая использует Web API и возвращает некоторые сведения о компании, такие как

0: {CompanyId: 1, Name: "xxxx", Address: "bn"}
1: {CompanyId: 2, Name: "yyyy", Address: "tv"}

service.ts

GetAll(): Observable<IEmployee>{
return this.httpClient.get<IEmployee>(this.apiUrl + "GetCompany_test").}

component.ts

private emp : IEmployee;

getAllEmployees(){
 this.service.GetAll().subscribe(
  response => {this.emp =response;console.log(response)},
  error => console.log(error)
  );}

IEmployee.ts

export interface IEmployee{
fullName:string,
Email:string,
Mobile:string,
City:string,
HireDate:Date
}

Я получаю информацию о компании, хотя использую Observable из Observable<IEmployee>. Так зачем здесь кастинг? и когда я приведу к Employee, и я легко получу данные, не относящиеся к Employee, я получу предупреждение или ошибку в консоли, верно? Я полностью запутался в том, что происходит.

Может кто-нибудь помочь мне понять концепцию кастинга здесь и посоветовать мне правильно использовать кастинг.

С уважением.

1 Ответ

1 голос
/ 31 марта 2020

Приведение среди других видов использования в основном для intellisense, чтобы помочь вам. Когда вы вызываете этот метод get и передаете ему тип IEmployee, то, что вы в основном говорите, это: «Эй, intellisense, я ожидаю результат типа IEmployee». Поэтому, когда вы подписываетесь на результат и затем пытаетесь получить доступ к его свойствам, он выдаст вам свойства, определенные в IEmployee. Intellisense или метод get не могут определить, что должно быть возвращено заранее. Так что, если вы тоже не знаете, вы можете передать ему тип any, что похоже на выражение «я не знаю, какой тип результата вернет», так что в этом случае вы не можете получить любой тип проверка, потому что типом может быть any.

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

service.ts

GetAll(): Observable<IEmployee>{
return this.httpClient.get<any>(this.apiUrl + "GetCompany_test").}

component1:

service.GetAll().subscribe(x => {
// x has no type here so no type checking.
// if you call a prop that isn't on it, you will see it at run time
});

// component2:

service.GetAll().subscribe((x:IEmployee) => {
// x has a type here so there is type checking.
// Intellisense can help you out here
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...