我在Coursera学习Angular 5并且对Promise主题有疑问。我只是重复一个lector代码并且有一个错误TS2322。这是我的服务文件。
import { Injectable } from '@angular/core';
import { Dish } from '../shared/dish'; //it's a class
import { DISHES } from '../shared/dishes'; //it's const
@Injectable()
export class DishService {
getDishes(): Promise<Dish[]> {
return Promise.resolve(DISHES);
}
getDish(id: number): Promise<Dish> {
return Promise.resolve(DISHES.filter((dish) => (dish.id === id))[0]);
}
getFeaturedDish(): Promise<Dish> {
return Promise.resolve(DISHES.filter((dish) => dish.featured)[0]);
}
使用该服务的组件:
import { Component, OnInit } from '@angular/core';
import { Dish } from '../shared/dish';
import { DishService } from '../services/dish.service';
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.scss']
})
export class MenuComponent implements OnInit {
dishes: Dish[];
selectedDish: Dish;
onSelect(dish: Dish) {
this.selectedDish = dish;
}
constructor(private dishService: DishService) { }
ngOnInit() {
this.dishes = this.dishService.getDishes()
.then(dishes => this.dishes = dishes);
}
}
我得到错误:
错误在src / app / dishdetail / dishdetail.component.ts(26,4):错误TS2322:类型'Promise'不能分配给'Dish'类型。 “承诺”类型中缺少属性“id”。 src / app / home / home.component.ts(28,5):错误TS2322:类型'承诺'不能分配给'Dish'类型。 src / app / menu / menu.component.ts(23,4):错误TS2322:类型'Promise'不能分配给'Dish []'类型。 “承诺”类型中缺少“'包含”属性。
我认为我的服务有问题,但我找不到有助于我的主题。请解释我的错误。
答案 0 :(得分:4)
您正试图将this.dishes
设置为承诺Dish
。
删除代码中的分配,并在收到数据后设置this.dishes
:
this.dishService.getDishes()
.then(dishes => this.dishes = dishes);