2017-02-10 13 views
0

Я новичок в использовании Observable с Angular 2, и моя структура не получит результаты, хотя я могу проверить ответ от моего REST API.Тип 'Observable <any>' не может быть присвоен типу 'StoresSummaryResults'. Свойство 'Данные' отсутствует в типе 'Observable <any>'

У меня есть следующий класс данных в Typcript.

import { RESTResult } from '../common/RESTResult';  // Common Response Structure 
import { StoresSummaryData } from './StoresSummaryData'; // Structure of records being returned as an array 

export class StoresSummaryResults extends RESTResult { 
    Data: Array<StoresSummaryData>;  // Data[] is array ofStoresSummaryData structure ({ field1, field2 ...) 

    constructor() { 
     super(); 
     this.Data = new Array<StoresSummaryData>(); // Ensure 1 records exists for testing 
     this.Data.push(new StoresSummaryData(0, 0)); 
    } 
} 

Результаты извлекаются из REST API

getResults(): Observable<StoresSummaryResults> { // Structure 
    return this.http.get(this.RequestHttpPath) 
        .map(this.extractData) 
        .catch(this.handleError); 
}; 

private extractData(res: Response) { 
    let body = res.json(); 
    return body.data || {}; 
} 

StoreInfo: StoresSummaryResults; 
public constructor(private storesService: StoresService) { } 
showResults(): void { 
    this.StoreInfo = this.storesService.getResults(); 
} 

Я получаю ошибку:

Typescript Error 
Type 'Observable<StoresSummaryResults>' is not assignable to type 'StoresSummaryResults'. Property 'Data' is missing in type 'Observable<StoresSummaryResults>'. 

У меня есть структура данных, хотя определено, так что я не уверен, что верный.

ответ

0

Свойство StoreInfo набран как StoresSummaryResults, но вы пытаетесь присвоить ей возвращаемое значение storesService.getResults() которое Observable<StoresSummaryResults>.

Так как изменение StoreInfo быть набраны в качестве Observable<StoresSummaryResults> или назначить его в подписке:

this.storeSevice.getResults() 
    .subscribe(results => this.StoreInfo = results); 
+0

Спасибо за быстрый ответ. Это исправляет мою ошибку. При тестировании кода раньше я имел определение с Observable , но только что получил ошибку в другой части кода. Я пытался проверить свой код без HTTP-вызова. При попытке просто вернуть 'Result = new Observable ()' Я не могу добавить элементы в структуру StoreInfo. Я не уверен, как легко это проверить, добавив структуру. –

+0

Вы можете это сделать, но вы хотите, чтобы любой класс включал свойство 'StoreInfo' (вы не включали определение) в' subscribe() '. Таким образом, самому классу не нужно ждать результата. Или вы можете проверить это, издеваясь над 'storeService', чтобы вернуть' Observable.return (storeInfoValue) '. –