'Observable<Hero[]>' 不可分配给类型 'Hero[]'

onT*_*net 2 observable rxjs angular

我正在关注 Angular 的英雄旅教程,我现在正在尝试将 observables 集成到我的项目中。将我的 hero.service.ts 文件更改为如下所示后

import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { Observable } from 'rxjs/Rx';
import { of } from 'rxjs/observable/of';

@Injectable()
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }
}
Run Code Online (Sandbox Code Playgroud)

我没有收到以下错误

src/app/heroes/heroes.component.ts(27,5) 中的错误:错误 TS2322:“Observable”类型不可分配给“Hero[]”类型。'Observable' 类型中缺少属性 'includes'。

我不确定我在这里做错了什么。我的英雄定义中并没有真正的“包含”属性。那堂课看起来像这样

export class Hero {
    id: number;
    name: string;
}
Run Code Online (Sandbox Code Playgroud)

这是我的项目链接,尽管我无法在堆栈闪电战中运行它

我会在这里列出完整的代码

hero.component.ts

import { Component, OnInit } from '@angular/core';
import { Hero } from '../hero';
import { HeroService } from '../hero.service';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  constructor(private heroService: HeroService) { }

  selectedHero: Hero;

  heroes: Hero[];

  ngOnInit() {
    this.getHeroes();
  }

  onSelect(hero: Hero): void {
    this.selectedHero = hero;
  }

  getHeroes(): void {
    this.heroes = this.heroService.getHeroes();
  }




}
Run Code Online (Sandbox Code Playgroud)

英雄服务.ts

import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { Observable } from 'rxjs/Rx';
import { of } from 'rxjs/observable/of';

@Injectable()
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }
}
Run Code Online (Sandbox Code Playgroud)

英雄.ts

export class Hero {
    id: number;
    name: string;
}
Run Code Online (Sandbox Code Playgroud)

模拟英雄.ts

import { Hero } from './hero';

export const HEROES: Hero[] = [
  { id: 11, name: 'Mr. Nice' },
  { id: 12, name: 'Narco' },
  { id: 13, name: 'Bombasto' },
  { id: 14, name: 'Celeritas' },
  { id: 15, name: 'Magneta' },
  { id: 16, name: 'RubberMan' },
  { id: 17, name: 'Dynama' },
  { id: 18, name: 'Dr IQ' },
  { id: 19, name: 'Magma' },
  { id: 20, name: 'Tornado' }
];
Run Code Online (Sandbox Code Playgroud)

bug*_*ugs 7

这就是问题:

  getHeroes(): void {
    this.heroes = this.heroService.getHeroes();
  }
Run Code Online (Sandbox Code Playgroud)

正如错误告诉你的那样,this.heroes是类型Hero[](因此是一个Hero元素数组),而this.heroService.getHeroes();返回一个observable,它的类型是Observable<Hero[]>

由于您正在使用 observable,您必须正确订阅它,如下所示:

getHeroes(): void {
   this.heroService.getHeroes().subscribe(result => this.heroes = result);
}
Run Code Online (Sandbox Code Playgroud)

  • @Jota.Toledo 但每个问题都需要一个答案,评论不能解决所有问题。 (2认同)