正确使用 subscribe() 到具有实体表示的 Observable

Proper use of subscribe() to Observable with entity representation

当使用我自己的实体表示作为 .ts 文件时,我很难建立一个简单的服务 - 组件连接:

news.ts 文件:

export interface News {
    id: number,
    something: String
}

我将其传递给服务:

import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { News } from '../interfaces/news';

@Injectable({
  providedIn: 'root'
})
export class SomeService {
  private newsUrl = '...';

  constructor(private http: HttpClient) { 
  }

  public getNews(): Observable<News> {
    return this.http.get<News>('...');
  }
}

当我尝试将其传递给这样的组件时:

export class SomeComponent {
  public news: News[] = [];

  constructor(private newsService: SomeService) {}

  public getNews(): void {
    this.newsService.getNews().subscribe(
      (response: News[]) => { this.newsArray = response }
... error
    )
  } 

我收到“没有过载匹配此调用。” 它可能微不足道,但我是新人

试试做这个 而不是:

return this.http.get<News>(....);
Just use the non-generic one:

return this.http.get(...);

这部分你检查了吗:

public getNews(): Observable<News> {
    return this.http.get<News>('...');
  }

在这里,如果您正在获取新闻数组,那么可能还需要将新闻数组放入 get 调用中。

我希望这能奏效。谢谢

您的服务调用和订阅之间存在类型不匹配:NewsNews[]

由于 getNews() 被定义为 return 一种 News 类型,订阅将期望获得 News 类型。但是,在订阅中,您指示类型 News[],这就是您出错的原因。

实际上,调用很可能是 returning News[],因此您应该更改方法定义中的类型:

  public getNews(): Observable<News[]> {
    return this.http.get<News[]>('...');
  }

when im using arrays I can't get any property from it, like it would be another type

您是否在模板中使用 *ngFor 来迭代数组?如果是这样,您应该能够访问属性:

<ul>
  <li *ngFor="let news of newsArray">{{ news.something }}</li>
</ul>