angularjs - IHttpPromise<{}>,可观察的如何使它在http调用中工作?
问题描述
我正在为 AngularJS、TypeScript 和 RxJs 苦苦挣扎。
我使用 rxJs 在组件拱门中使用 Typescript 进行编码。但它仍然是 AngularJs ;)
我已经将带有 id、brand 和 model 字段的接口 Car 定义为与 API 匹配的字符串。
现在我正在对 rest API 进行 HTTP 调用,当我尝试使用该接口定义类型时,它给了我一个错误。我不知道我做错了什么。也许太多的Angular 6方式。
我有一个变量
public cars$: Observable<Car[]>;
现在在构造函数中,我正在尝试从 API 获取汽车...
this.cars$ = fromPromise(this.$http.get('http://...someurl...')).pipe(map((data: IHttpResponse<{}>) => data));
我应该如何更改data: IHttpResponse<{}>
线路以使其与 Car 类型一起使用?
我已经尝试了几十种变化并得到一个错误
“类型 Observable 不可分配给类型 Observable<{}>” “参数不可分配给参数” “源和源的类型不兼容”...
我究竟做错了什么?
解决方案
interface IHttpResponse<T> {
data: T;
status: number;
headers: IHttpHeadersGetter;
config: IRequestConfig;
statusText: string;
/** Added in AngularJS 1.6.6 */
xhrStatus: 'complete' | 'error' | 'timeout' | 'abort';
}
我们看到它将有一个data
类型为 T 的成员。我们可以通过将类型放在菱形<>中来告诉 typescript T 是什么
IHttpResponse<Car[]>
用我们接口的类型替换泛型现在看起来像这样
interface IHttpResponse {
data: Car[];
status: number;
headers: IHttpHeadersGetter;
config: IRequestConfig;
statusText: string;
/** Added in AngularJS 1.6.6 */
xhrStatus: 'complete' | 'error' | 'timeout' | 'abort';
}
所以我们希望我们的函数看起来像这样:
(response: IHttpResponse<Car[]>) =>{
//looking at the above interface we see that response.data is now Car[];
const carArray:Car[] = response.data
return carArray;
}
Map 返回我们返回的 Observable,因此它将与您的变量声明相匹配cars$: Observable<Car[]>;
fromPromise()
我怀疑在调用和传入get时类型信息丢失了。尝试提供 fromPromise 类型信息
fromPromise(this.$http.get<Car[]>('http://...someurl...'))
推荐阅读
- javascript - 多个 AND OR 运算符 Javascript
- java - 为什么 2147483647+1 运行成功而 2147483648 给出错误
- python - 正则表达式搜索模式并将输出作为字符串
- java - 尝试在 Quarkus 中进行 REST 调用时出错
- c# - 如何使用存储在 sqlite 数据库中的数据填充我的列表
- apache - .htaccess - 拒绝除 index.php 和当前目录之外的所有内容 ./
- reactjs - 如何使用按钮加载更多数据?
- python - 如何为 biLSTM 层 Keras 设置自定义初始权重?
- python - 查找具有指定数量的唯一元素 (n) 和指定总和 (s) 的一维数组的所有子集
- vba - VBA 从 Jira 下载启用宏的文件 (xlsm)