javascript – 类型’Observable’不能分配给’Observable’类型

前端之家收集整理的这篇文章主要介绍了javascript – 类型’Observable’不能分配给’Observable’类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的Api服务中,我有这个简单的getUsers函数获取api上的所有用户.
  1. public getUsers(url: string): Observable<IUser[]> {
  2. return this._http.get(url);
  3. }

这是我的IUser界面,我现在已将所有字段设为可选.

  1. export interface IUser {
  2. id?: string;
  3. first_name?: string;
  4. last_name?: string;
  5. location?: string;
  6. followers?: string;
  7. following?: string;
  8. checkins?: string;
  9. image?: string;
  10. }

以下是我在组件中使用该服务的方法

  1. export class SocialOverviewContainerComponent implements OnInit {
  2. public userData = [];
  3. public showForm = {};
  4. private _apiService: ApiService;
  5.  
  6. constructor(apiService: ApiService) {
  7. this._apiService = apiService
  8. }
  9.  
  10. public ngOnInit(): void {
  11. this.getUsersData();
  12. }
  13.  
  14. public getUsersData() {
  15. this._apiService.getUsers(ApiSettings.apiBasepath + 'users/')
  16. .subscribe(users => {
  17. this.userData = users;
  18. })
  19. }
  20. }

这是我编译时得到的Type错误

  1. ERROR in src/app/services/api.service.ts(18,5): error TS2322: Type 'Observable<Object>' is not assignable to type 'Observable<IUser[]>'.
  2. Type 'Object' is not assignable to type 'IUser[]'.
  3. The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?
  4. Property 'includes' is missing in type 'Object'.

我认为这可能是因为我的响应与界面不匹配,我对其进行了双重检查.而且我现在也已选择该字段以确保.

我知道我可以通过将observable转换成任何一个来解决这个问题,但这不会破坏使用Typescript的意义吗?

对我出错的地方有任何帮助都会很棒

提前致谢

解决方法

有两种方法可以做到这一点,它取决于您使用的RxJS / Angular版本.以下是根据您的版本执行此操作的两种方法
  1. // Using RxJS v4 / Angular v2-4. I assume that you're using the HttpModule...
  2. import 'rxjs/add/operator/map';
  3.  
  4. public getUsers(url: string): Observable<IUser[]> {
  5. return this._http.get(url)
  6. .map((response: Response) => <IUser[]>response.json());
  7. }
  8.  
  9.  
  10. // Using RxJS v5 / Angular 5+ (at the moment). I assume that you're using the HttpClientModule,as the HttpModule was deprecated in Angular v4.
  11. public getUsers(url: string): Observable<IUser[]> {
  12. return this._http.get<IUser[]>(url);
  13. }

猜你在找的JavaScript相关文章