使用Angular2在TypeScript中规范Observable

Ets*_*tse 6 angular

我正在尝试创建一个服务,返回我的组件可以订阅的Observable.但是我收到以下错误:

Property 'subscribe' does not exist on type 'Observable'.
Run Code Online (Sandbox Code Playgroud)

我目前正在运行build alpha.44,下面你会发现一些代码可以重现问题.

import {Http} from 'angular2/http';
import {Observable} from 'angular2/core';

export class Backend {
    http: Http;

    constructor(http: Http) {
        this.http = http;
        this.getTeams().subscribe();
    }

    public getTeams(): Observable {
        return this.http.get('/api/teams')
            .map(JSON.parse);
    }
}
Run Code Online (Sandbox Code Playgroud)

更改代码以返回"任何"类型似乎可行,但这消除了使用TypeScript的一些优点.有没有什么好方法可以在Angular2的当前版本中使用Observables的严格类型?

ale*_*ods 7

返回的http.getObservable来自rxjs,而不是angular2 Observable.作为临时解决方案,您可以rxjs Observable从"@activex/rxjs/dist/cjs/Observable" 导入(请参阅此plunker).

import Observable from '@reactivex/rxjs/dist/cjs/Observable';

class Backend {
  // ...
  getTeams() : Observable {
    return this.http.get('api/teams.json')
      .map(res => res.json());
  }
}
Run Code Online (Sandbox Code Playgroud)

但恕我直言改变代码返回"任何"是目前最好的解决方案.他们现在在angular2 http模块中执行此操作.

  • 注意将来发现此问题的人:从构建46开始,http.get不会返回一个Observable <Response>,它会扩展RxObserbable. (5认同)