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