我正试图从一个可观察到的物体中检索信息. 但我想不出该怎么做才好. 比如像这样,Dog API

它应该返回一个JSON对象

{
    "message": "https://images.dog.ceo/breeds/setter-english/n02100735_10064.jpg",
    "status": "success"
}

为此,我有一个服务功能

  getRandomImage(): Observable<Random> {
    return this.client.get<Random>(`https://dog.ceo/api/breeds/image/random`)
  }

但是,当我try 将其呈现在HTML上时

<div>
  <p *ngIf=" random$ | async">{{ random$.message }}</p>
</div>

我收到错误消息

Property 'message' does not exist on type 'Observable<Random>'

另外,有没有人能简单地给我解释一下这个函数的作用

getListFacts(length: number, limit: number) : Observable<facts[]> {
    return this.client
        .get<{ data: facts[] }>(`https://catfact.ninja/factsmax_length=${length}&limit=${limit}`)
        .pipe(map(({ data }) => data));
}

比如,我告诉它返回事实数组的可观察性,用一个GET请求返回一个包含名为data的事实数组的对象,那么管道映射做了什么?

谢谢

我正在try 使用带有异步管道的可观察对象进行渲染. 但是我不太明白如何正确地编写可观察的检索函数来正确呈现

推荐答案

主要的问题是,您正在直接访问可观测对象random$,而实际上您想要访问由该可观测对象emits 的对象.为了实现您想要的,您可以在您的html代码中添加as randomImage,然后访问randomImage.

我创建了一个工作示例:

TS-File名:

random$: Observable<RandomImage>;

constructor(private client: HttpClient) {
    this.random$ = this.client.get<RandomImage>(`https://dog.ceo/api/breeds/image/random`);
}

然后是HTML-Code:

<p *ngIf="random$ | async as randomImage">{{ randomImage.message }}</p>

Regarding your question about the map-operator

下面的代码检索包装在对象中的数据array.然后使用map运算符从对象中提取数组,这样最终只返回包装对象的数组without:

getListFacts(length: number, limit: number) : Observable<facts[]> {
    return this.client
        .get<{ data: facts[] }>(`https://catfact.ninja/factsmax_length=${length}&limit=${limit}`)
        .pipe(map(({ data }) => data));
}

Typescript相关问答推荐

如何推断类方法未知返回类型并在属性中使用它

参数类型undefined不能分配给参数类型字符串|未定义

React router 6.22.3不只是在生产模式下显示,为什么?

为什么typescript不能推断类的方法返回类型为泛型''

打印脚本丢失函数的泛型上下文

Express Yup显示所有字段的所有错误

如何在另一个参数类型中获取一个参数字段的类型?

使用订阅时更新AG网格中的行

如何将v-for中的迭代器编写为v-if中的字符串?

如何在Typescript 中组合unions ?

如何过滤文字中的类对象联合类型?

在Cypress中,您能找到表格中具有特定文本的第一行吗?

类型脚本-处理值或返回值的函数

是否可以通过映射类型将函数参数约束为预定义类型?

如何通过属性名在两个泛型数组中找到匹配的对象?

如何在打字角react 式中补齐表格组

如何使函数参数数组不相交?

在打印脚本中将对象类型转换为数组

我可以使用JsDocs来澄清Typescript实用程序类型吗?

为什么将有效类型传递给类型化数组构造函数会生成错误