我有一个可观察到的人像这样:
this._mySubscription = this._myService.getSomething(id)
.subscribe(
response => this._myData = response,
error => this.displayError(<any>error),
() => this.stopLoading()
);
我可以使用Elvis运算符在我的HTML标记中访问它的属性,如下所示:
{{_myData?.PropertyNameHere}}
但是如何使用TypeScript访问组件中的相同属性?
这会在属性下产生一条波浪形的红线:
this._myData.PropertyNameHere
并说:
Observable
上不存在属性
更新: 服务电话的例子
getSomething(id: string): Observable<any> {
let params = 'id=' + id;
return this._http
.post(apiUrl + 'SomeController/SomeAction', params, {withCredentials: true, headers: this.headers})
.timeoutWith(maxTimeHttpCalls, Observable.defer(() => Observable.throw(this._feedbackService.timeout())))
.map((response: Response) => response.json().data.Items);
}
答案 0 :(得分:1)
_myData
不应为Observable
类型。它应该是您从服务中的map
运算符返回的对象的类型。
.map((response: Response) => response.json().data.Items)
无论data.Items
类型是什么,都应该是_myData
的类型。如果您不知道该类型是什么,那么只需将其any
。然后你可以做任何事情而无需编译器警告。但是如果您知道数据的结构,最好为它创建一个模型类,以便您获得强大的输入
interface SomeModel {
somProperty: string;
}
getSomething(id: string): Observable<SomeModel> {
return this._http
...
.map((response: Response) => <SomeModel>)response.json().data.Items);
}
您的组件
class MyComponent {
private _myData: SomeModel;
this._mySubscription = this._myService.getSomething(id)
.subscribe((response: SomeModel) => this._myData = response,
error => this.displayError(<any>error),
() => this.stopLoading());
}