首页 > 解决方案 > Angular 6如何设置来自观察者的承诺的返回类型

问题描述

我通常是 observable 的人,但为了防止在这种情况下出现“回调地狱”,我在上面使用toPromise()它是为了方便,但在尝试定义返回类型时我收到了 lint 错误消息:

“对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗?“Object”类型缺少“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();
}

标签: angulartypescripthttppromise

解决方案


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

推荐阅读