Я изучаю Angular2 и Typescript. Я работаю над учебником Heroes по angular.io, но применяю его к проекту, который я конвертирую из ASP.Net. Я столкнулся с проблемой, которая, как мне кажется, связана с моим недостатком понимания, хотя, насколько я вижу, она соответствует тому, что делает соответствующая часть учебника.
import { Injectable } from '@angular/core';
import {RiskListSummary} from '../Models/RiskListSummary';
import { Observable } from 'rxjs/Rx';
import { Http, Response } from '@angular/http';
@Injectable()
export class RiskAssessmentListService {
constructor(private http : Http) {}
private serviceUrl = "http://myserviceurl/";
getRisks(): Observable<RiskListSummary[]> {
return this.http.get(this.serviceUrl)
.map(this.extractData())
.catch(this.handleError());
}
private extractData(res: Response) {
if (res.status < 200 || res.status >= 300) {
throw new Error('Bad response status: ' + res.status);
}
let body = res.json();
return body.data || { };
}
private handleError (error: any) {
let errMsg = error.message || 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
}
Я получаю следующую ошибку в строке "return this.http.get(this.serviceUrl)":
Ошибка: (20, 16) TS2322: Тип 'Observable < {} > ' не присваивается типу "Наблюдаемая". Тип '{}' не присваивается типу 'RiskListSummary []. Длина свойства 'length' отсутствует в типе '{}'.
Если это имеет значение, я использую webstorm (последняя версия), но я думаю, что эта ошибка идет прямо из компилятора typescript. Я думал, может быть, мне нужен файл с типизацией для rxjs, но учебник не использует его, и ни один из тех, которые я нашел с помощью "поиска по типу", не изменил
Ниже приведены мои зависимости от package.json:
"dependencies": {
"@angular/common": "2.0.0-rc.1",
"@angular/compiler": "2.0.0-rc.1",
"@angular/core": "2.0.0-rc.1",
"@angular/http": "2.0.0-rc.1",
"@angular/platform-browser": "2.0.0-rc.1",
"@angular/platform-browser-dynamic": "2.0.0-rc.1",
"@angular/router": "2.0.0-rc.1",
"@angular/router-deprecated": "2.0.0-rc.1",
"@angular/upgrade": "2.0.0-rc.1",
"systemjs": "0.19.27",
"es6-shim": "^0.35.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"zone.js": "^0.6.12"