Зачем нам нужно указывать тип возвращаемого значения в методе get / post при использовании операции Angular CRUD? - PullRequest
0 голосов
/ 18 апреля 2020
 getCompanyInformation(id: number): Observable<BaseModel<CompanyInfoModel[]>> {
    return this.http.get<BaseModel<CompanyInfoModel[]>>(apiUrl + 'getcompanybyid/' + companyId)
      .pipe(
        tap(_ => console.log(`fetched company id=${companyId}`)),
        catchError(this.handleError<BaseModel<CompanyInfoModel[]>>(`getCompany id=${companyId}`))
      )
 }

Из приведенного выше примера я пытаюсь понять, если мы уже упомянули наш тип возвращаемого значения как :Observable<BaseModel<CompanyInfoModel[]>>, тогда почему мы должны упоминать снова после метода get .get<BaseModel<CompanyInfoModel[]>>, если я удаляю этот <BaseModel<CompanyInfoModel[]>> после .get () Я получаю сообщение об ошибке типа 'Observable<Object>' is not assignable to type 'Obserable<BaseModel<CompanyInfoModel[]>>'.

BaseModel.ts

export class BaseEntityModel<T> {
public entity: T[];
public status: number;
public message: string;
constructor(init?: Partial<BaseEntityModel<T>>) {
    Object.assign(this, init);
  }
}

CompanyModel.ts

export class CompanyInformation {
companyID: number;
companyName: string;
description: string
constructor(init?: Partial<CompanyInformation>) {
   Object.assign(this, init);
  }
}

1 Ответ

0 голосов
/ 18 апреля 2020

Вот как работает машинопись. По умолчанию http.get (без параметров) возвращает Observable<Object>. Поэтому, если вы объявите тип возврата вашего метода как Observable<BaseModel<CompanyInfoModel[]>>, Typescript будет жаловаться, что то, что вы объявили как тип возврата из вашего метода, не соответствует тому, что будет возвращать вызов http.get.

Однако вывод типа должен работать Другой способ: если вы используете http.get<BaseModel<CompanyInfoModel[]>>, то обычно вам не нужно указывать тип возврата для вашего метода

 getCompanyInformation(id: number) {
    return this.http.get<BaseModel<CompanyInfoModel[]>>(apiUrl + 'getcompanybyid/' + companyId)
      .pipe(
        tap(_ => console.log(`fetched company id=${companyId}`)),
        catchError(this.handleError<BaseModel<CompanyInfoModel[]>>(`getCompany id=${companyId}`))
      )
 }

(лично мне все еще нравится указывать тип возвращаемого значения для удобства чтения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...