Angular 6如何设置观察者的诺言的返回类型

时间:2019-04-12 05:26:32

标签: angular typescript http promise

我通常是一个可观察的对象,但是为了防止在这种情况下发生“回调地狱”,我在上面使用了toPromise(),但尝试定义返回类型时却收到了lint错误消息: / p>

  

“对象”类型可分配给很少的其他类型。您的意思是改用“ any”类型吗?类型“对象”缺少   类型“ ReferralReasons []”中的以下属性:length

我的代码(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)
    });
}

但是这可行,但这不是我所拥有的(如您所见,它略有不同,并且我不能在获取之前输入类型):

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

1 个答案:

答案 0 :(得分:0)

您需要使用预期的返回类型更新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();
}

OR

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