类型'年'不能指定为'年[]'类型。 “年份”

时间:2018-05-23 08:54:38

标签: angular angular-observable

使用angular 4和observable时出错。

src / app / ca-calendar / calendar.component.ts(84,5)中的错误:错误TS2322:类型'Observable'不能分配给'Observable'类型。   类型'年'不能指定为'年[]'类型。     'Year'类型中缺少属性'includes'。

我做错了什么?

服务:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { Year, Month } from '../../models';

@Injectable()
export class CalendarService {
  endPoint: string;
  private _calendarUrl = '/api/mycalendar';

  constructor(private http: HttpClient) {

  }

  getYear(id: string): Observable<Year> {
    return this.http.get(this._calendarUrl + '?id=' + id)._catch(this.handleError);
  }

  getYears(): Observable<Year> {
    return this.http.get(this._calendarUrl)
                    .map((res: Response) => res.json())
                    ._catch(this.handleError);

组件:

import { Component, OnInit } from '@angular/core';
import { MonthCalendarComponent } from './month-calendar/month-calendar.component';
import { Month } from '../models/month';
import { MonthsService } from '../services/calendar/months/months.service';
import { CalendarService } from '../services/calendar/calendar.service';
import { Year } from '../models';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'ca-calendar',
  templateUrl: './calendar.component.html',
  styleUrls: ['./calendar.component.css']

})
export class CalendarComponent implements OnInit {
public myYears$: Observable<Year[]>;


  constructor(private calendarService: CalendarService, private monthsService: MonthsService) {}

  ngOnInit() {

    this.myYears$ = this.calendarService.getYears();
}

...和模型

import { Month } from './month';
import { Week } from './week';

export class Year {
    id: String;
    number: Number;
    months: Month[];
    weeks: Week[];

    constructor() {

    }
}

1 个答案:

答案 0 :(得分:0)

您的方法getYears签名为Observable<Year>,您的变量$ myYears使用Observable<Year[]>键入。 尝试用getYears方法的Observable<Year[]>签名做类似的事情:

 getYears(): Observable<Year[]> {
      return this.http.get(this._calendarUrl)
                .map((res: Response) => res.json())
                .map((yearsData: any) => {
                    return yearsData.map(yearData => {
                         const year = new Year());
                         year.id = yearData.id;
                         ...
                         return year;
                    })
                })
                ._catch(this.handleError);

使用该方法,您可以直接获得模型的实例并获得良好的签名。

希望它可以帮到你。