angular - 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();
}
解决方案
您需要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();
}
推荐阅读
- google-apps-script - 如何通过脚本编辑器在 Google 表格之间自动复制数据并编写日期
- amazon-web-services - AWS - CloudWatch 警报 - 如何从 AWS CloudWatch 控制台获取指标计数?
- html - 我如何联系我们页面到 django
- asp.net - 在 asp.net core 3.1 mvc 中元数据感知的替代方案是什么?
- grub2 - Grub2 - 换行换行溢出文本
- android - Android Manifest 是否影响 Flutter 中的构建
- c++ - 为什么这个反转单词的代码不起作用?
- amazon-s3 - Video.js - HLS => 没有“Access-Control-Allow-Origin”标头 [S3,CloudFront]
- python - 如何将 DataFrame 中的列分离到新数据集中
- flutter - 库比蒂诺标签栏