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

Angular 如何设置观察者承诺的返回类型,angular,typescript,http,promise,Angular,Typescript,Http,Promise,我通常是observable的一员,但为了防止在这种情况下出现“回调地狱”,我在其上使用了toPromise(),以方便操作,但在尝试定义返回类型时,我收到了lint错误消息: “对象”类型可分配给很少的其他类型。你的意思是用“any”类型吗?类型“Object”缺少 “ReferralReasons[]”类型中的以下属性:长度 我的代码(this.apiSvc.get返回http.get对象): 我本以为更改any和设置类型Array会起作用,但我缺少什么来设置正确的类型呢 ---更新 我的服

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

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

我的代码(
this.apiSvc.get
返回http.get对象):

我本以为更改
any
和设置类型
Array
会起作用,但我缺少什么来设置正确的类型呢

---更新

我的服务电话如下所示:

get(apiURL, data = {}) {
    return this.http.get(this.parseURL(apiURL), {
        headers: this.getHeaders(),
        params: this.parseGetParams(data)
    });
}
但这是可行的,但它不是我所拥有的(正如你所看到的,它有点不同,我不能把类型放在get之前):

异步getJobReferralReasons2():承诺{ 返回这个.http.get(“”,{}).toPromise(); }
您需要使用预期的返回类型更新您的http
get
调用,以便
promise
识别它

例如:

apiSvc使用类型的
T
模板

get(apirl,data={}){
返回this.http.get(this.parseURL(apirl)){
headers:this.getHeaders(),
params:this.parseGetParams(数据)
});
}
组件使用实际类型

异步GetJobReferralReasions():承诺{ 返回this.apiSvc.get(`${this.API_JOB}/ReferralReasons`)。toPromise(); } 或

异步GetJobReferralReasions():承诺{ 返回this.apiSvc.get(`${this.API_JOB}/ReferralReasons`)。toPromise(); }
您需要使用预期的返回类型更新您的http
get
调用,以便
promise
识别它

例如:

apiSvc使用类型的
T
模板

get(apirl,data={}){
返回this.http.get(this.parseURL(apirl)){
headers:this.getHeaders(),
params:this.parseGetParams(数据)
});
}
组件使用实际类型

异步GetJobReferralReasions():承诺{ 返回this.apiSvc.get(`${this.API_JOB}/ReferralReasons`)。toPromise(); } 或

异步GetJobReferralReasions():承诺{ 返回this.apiSvc.get(`${this.API_JOB}/ReferralReasons`)。toPromise(); }
IDE似乎不喜欢这两种语法,并抱怨说“预期的0类型参数,但得到了1”。您是否在
apiSvc
中包装了
httpClient的
get方法?更新了答案。
get
方法应接受模板类型。现在,当从组件调用
get
方法时,您可以提供实际的类型。这是一个完美的技巧-我今天学到了一些新东西,谢谢!IDE似乎不喜欢这两种语法,并抱怨说“预期的类型参数为0,但得到了1”。您是否在
apiSvc
中包装了
httpClient的
get方法?更新了答案。
get
方法应接受模板类型。现在,当从组件调用
get
方法时,您可以提供实际的类型。这是一个完美的技巧-我今天学到了一些新东西,谢谢!你能对StackBlitz中的错误做一个真实的场景吗?ashish.gd所说的应该是什么?您能否对StackBlitz中的错误做出真实的假设?ashish.gd所说的应该起作用
async getJobReferralReasons(): Promise<any> {
    return this.apiSvc.get(`${this.API_JOB}/ReferralReasons`).toPromise();
}
const reasons = await this.helpdeskSvc.getJobReferralReasons();
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();
}