我正在從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();
}
}
你可以發佈'this.getHeroes()'方法和'英雄'接口。 – Rajez
代碼中應該有Hero類。你應該在你使用的地方導入它。無論這個函數放入從Hero.ts導入{Hero}(注意路徑),然後再試一次。 – 0m3rF
它引發錯誤,因爲heroes.find可能返回undefined。 –