Angular 6, как установить тип возврата обещания от наблюдателя - PullRequest
0 голосов
/ 12 апреля 2019

Я обычно один для наблюдаемых, но для предотвращения «ада обратного вызова» в этом сценарии я использую toPromise() для упрощения, но я получаю сообщение об ошибке lint при попытке определить тип возвращаемого значения:

Тип «Объект» можно назначить очень немногим другим типам.Вы хотели использовать вместо этого любой тип?Типу «Объект» не хватает следующих свойств из типа «ReferralReasons []»: длина

мой код (this.apiSvc.get возвращает объект http.get):

async getJobReferralReasons(): Promise<Array<ReferralReasons>> {
    return this.apiSvc.get(`${this.API_JOB}/ReferralReasons`).toPromise();
}

но это нормально без ошибки:

async getJobReferralReasons(): Promise<any> {
    return this.apiSvc.get(`${this.API_JOB}/ReferralReasons`).toPromise();
}

Итак, при вызове я получаю массив реферальных кодов прямо в массиве:

const reasons = await this.helpdeskSvc.getJobReferralReasons();

Я бы подумал, что изменение any и установка типа Array<ReferralReasons> будет работать, что мне не хватает, чтобы установить правильный тип?

--- Обновление

Мой сервисный вызов выглядит так:

get(apiURL, data = {}) {
    return this.http.get(this.parseURL(apiURL), {
        headers: this.getHeaders(),
        params: this.parseGetParams(data)
    });
}

Но это работает, но это не то, что у меня есть (как вы можете видеть, это немного отличается, и я не могу поставить тип перед get):

async getJobReferralReasons2(): Promise<ReferralReasons[]> {
    return this.http.get<ReferralReasons[]>('', {}).toPromise();
}

1 Ответ

0 голосов
/ 12 апреля 2019

Вам необходимо обновить ваш вызов http get ожидаемым типом возврата , чтобы promise распознал его.

Пример:

apiSvc с использованием шаблона T для типа.

get<T>(apiURL, data = {}) {
  return this.http.get<T>(this.parseURL(apiURL), {
      headers: this.getHeaders(),
      params: this.parseGetParams(data)
  });
}

компонент с использованием фактического типа

async getJobReferralReasons(): Promise<Array<ReferralReasons>> {
    return this.apiSvc.get<Array<ReferralReasons>>(`${this.API_JOB}/ReferralReasons`).toPromise();
}

ИЛИ

async getJobReferralReasons(): Promise<ReferralReasons[]> {
    return this.apiSvc.get<ReferralReasons[]>(`${this.API_JOB}/ReferralReasons`).toPromise();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...