export class MyClass {
data: MyData;
constructor(private dataService: DataService) {
this.data = this.dataService.getData(); // error
}
}
export class DataService{
data: MyData;
constructor(private http: Http) { }
getData(): Observable<MyData>{
return Observable.from([this.fakeData()]
.map(res=>res as MyData));
}
private fakeData() : MyData {
...
}
}
我在网上收到错误
this.data = this.dataService.getData()
类型Observable不能分配给MyData
答案 0 :(得分:1)
打字稿是对的。
在您的组件中,您说data
应该是MyData
对象。
然后,在您的构造函数中,您调用的服务会返回Observable
MyData
,并尝试将其结果分配给您的属性data
。
这不是Observable的工作原理。
在这里,您有两个简单的解决方案:
export class MyClass {
data: MyData;
constructor(private dataService: DataService) {
this.dataService.getData().subscribe((myData) => {
this.data = myData;
});
}
}
AsyncPipe
export class MyClass {
data$: Observable<MyData>; // Change the type here.
// The $ suffix is a convention to tell that
// this attribute is an observable.
constructor(private dataService: DataService) {
this.data$ = this.dataService.getData();
}
}
然后,在您的模板中,您可以将data
与AsyncPipe
<div>
<some-component [someData]="data$ | async"></some-component>
</div>
答案 1 :(得分:0)
试试这个,将数据声明为可观察的MyData
export class MyClass {
data: Observable<MyData>;
constructor(private dataService: DataService) {
this.data = this.dataService.getData(); // error
}
}