首页 > 解决方案 > 角度错误 TS2322:输入“承诺”

问题描述

我在 Coursera 学习 Angular 5,但对 Promise 主题有疑问。我只是重复了一个讲师代码并出现错误 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”。“Promise”类型中缺少属性“id”。src/app/home/home.component.ts(28,5):错误 TS2322:“Promise”类型不可分配给“Dish”类型。src/app/menu/menu.component.ts(23,4):错误 TS2322:类型“Promise”不可分配给类型“Dish[]”。“Promise”类型中缺少属性“includes”。

我认为我的服务有问题,但我找不到对我有帮助的主题。请解释一下有什么问题。

标签: angulartypescript

解决方案


您正在尝试设置this.dishes一个承诺,而它是一个Dish. 删除代码中的分配并this.dishes仅在收到数据后进行设置:

this.dishService.getDishes()
      .then(dishes => this.dishes = dishes);

推荐阅读