在使用角度 4 和可观察时出现错误。
src/app/ca-calendar/calendar.component.ts(84,5( 中的错误:错误 TS2322:类型"可观察"不可分配给类型"可观察"。 类型"年份"不能分配给类型"年份[]"。 属性"包括"类型"中缺少"年"。
我做错了什么?
服务:
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() {
}
}
您的方法 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);
使用该方法,您可以直接获得模型的实例,并且具有良好的签名。
希望对您有所帮助。