2017-08-24 49 views
1

我正在從angular tutorial學習angular4。 下面是一個函數從服務的功能得到了英雄:TS2322:鍵入'Promise <Hero | 'undefined>'不可分配鍵入'Promise <Hero>'

@Injectable() 
export class HeroService { 
    getHeroes(): Promise<Hero[]> { 

     return new Promise(resolve => { 
      // Simulate server latency with 2 second delay 
      setTimeout(() => resolve(HEROES), 2000); 
     }); 
    } 

    getHero(id: number): Promise<Hero> { 

     if (id < 0) { 
      throw new Error('Hero is not found.'); 
     } 
     return this.getHeroes() 
      .then(heroes => heroes.find(hero => hero.id === id)); 
    } 
} 

在執行時,它拋出錯誤:

TS2322: Type 'Promise<Hero | undefined>' is not assignable to type 'Promise<Hero>'. 
Type 'Hero | undefined' is not assignable to type 'Hero'. 
Type 'undefined' is not assignable to type 'Hero'. 

別人也面臨這個問題?請幫忙。 謝謝。

@Component({ 
    selector: 'hero-detail', 
    templateUrl: './hero-detail.component.html' 
}) 
export class HeroDetailComponent implements OnInit { 
    @Input() hero: Hero; 

    constructor(private heroService: HeroService, private route: ActivatedRoute, private location: Location) { } 

    ngOnInit(): void { 
     this.route.paramMap 
      .switchMap((params: ParamMap) => this.heroService.getHero(+(params.get('id') || -1))) 
      .subscribe(hero => this.hero = hero); 
    } 

    goBack(): void { 
     this.location.back(); 
    } 
} 
+0

你可以發佈'this.getHeroes()'方法和'英雄'接口。 – Rajez

+0

代碼中應該有Hero類。你應該在你使用的地方導入它。無論這個函數放入從Hero.ts導入{Hero}(注意路徑),然後再試一次。 – 0m3rF

+0

它引發錯誤,因爲heroes.find可能返回undefined。 –

回答

2

的打字稿原因引發此錯誤是因爲Array.find回報undefined所有元素不匹配的情況hero.id === id

參考docArray.find

The find() method returns the value of the first element in the array that satisfies the provided testing function. Otherwise undefined is returned.


要避免錯誤,你應該將函數的返回類型更改爲Promise<Hero | undefined>

getHero(id: number): Promise<Hero | undefined> { // <----mention here for return type 
    return this.getHeroes() 
      .then(heroes => heroes.find(hero => hero.id === id)); 
} 
+0

我試過 TS2322:Type'Hero | undefined'不能指定'Hero'類型 Type'undefined'不能指定爲'Hero'類型 –

+0

它仍然會拋出錯誤:( –

+0

@Shelly它應該工作。給我一分鐘,我會在當地確認。 – Pengyy

相關問題