类型'Observable '不可分配以键入'StoresSummaryResults'。属性“数据”缺少类型'Observable '
问题描述:
我对使用Angular 2的Observable和我的结构不会收到结果是新手,即使我可以验证来自我的REST API的响应。类型'Observable <any>'不可分配以键入'StoresSummaryResults'。属性“数据”缺少类型'Observable <any>'
我在Typescript中有以下数据类。
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>'.
我有,虽然定义的数据结构,所以我不知道该怎么正确。
答
StoreInfo
属性键入为StoresSummaryResults
,但您试图为其分配返回值storesService.getResults()
,即Observable<StoresSummaryResults>
。
所以要么改变StoreInfo
以分型为Observable<StoresSummaryResults>
,或订阅分配给它:
this.storeSevice.getResults()
.subscribe(results => this.StoreInfo = results);
感谢您的快速回复。这纠正了我的错误。在较早的测试代码中,我使用了Observable的定义,但刚刚在代码的另一部分收到了错误。我试图在没有HTTP调用的情况下验证我的代码。在试图简单地返回'Result = new Observable ()'我不能将项目添加到StoreInfo结构。我不知道如何通过添加结构来轻松测试。 –
你当然可以这样做,但是你想要在'subscribe()'中构造包含'StoreInfo'属性的任何类(你没有包括定义)。这样,班级本身不必等待结果。或者你可以通过模拟'storeService'返回'Observable.return(storeInfoValue)'来测试它。 –