2016-05-17 45 views
1

rxjs扩展方法:5.0.0-beta.2 打字稿:1.8 Angular2:β-9与通用obeservable的返回类型

我试图嘲弄一个HTTP服务类,但遇到问题时延长在角度2文档中描述的类。

似乎你不能重写一个方法,返回一个类型的observable?我错过了什么?

import {Observable} from "rxjs/Observable"; 
import {IQuery} from "../Query"; 
import {Http} from "angular2/http"; 

export interface IQuery<TResult> {   
} 

export class A { 
    public test = <T>(q: IQuery<T>): Observable<T> => { 
     var queryName = this.getName(query); 
     var url = `api/query/${queryName}`; 
     return this.httpPost<TResult>(url, query); 
    }; 
} 

export class AMock extends A { 
    public test = <T>(q: IQuery<T>): Observable<T> => { 
     return mockObservable; 
    }; 
} 

Severity Code Description Project File Line Suppression State 
Error TS2415 Class 'AMock' incorrectly extends base class 'A'. 
    Types of property 'test' are incompatible. 
    Type '<T>(q: IQuery<T>) => Observable<T>' is not assignable to type '<T>(q: IQuery<T>) => Observable<T>'. 
     Type 'Observable<any>' is not assignable to type 'Observable<any>'. 
     Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'. TypeScript Virtual Projects 

如果返回类型是T但不是observable<T>

谢谢!

+0

您能否生成一个定义'Iq'并具有Rx导入的文件示例?进口和/或类型可能是其中的一部分。 – Meligy

+0

如果可能的话,您可能还想升级到beta6。 – Meligy

+0

更新了更多的代码。我用新的角度2 rc-1测试了beta-6,但遇到了其他问题。错误/问题仍然存在,所以我不认为它是由rxjs beta-6解决的 – Darkness

回答

0

我不认为问题出在您指出的代码中。也许在实际代码或其他东西的进口。

下面的代码编译的打字稿^ 1.8.10罚款:

import {Observable} from "rxjs/Observable"; 

export interface IQuery<TResult> {   
} 

export class A { 
    public test = <T>(q: IQuery<T>): Observable<T> => { 
     return null; 
    }; 
} 

export class AMock extends A { 
    public test = <T>(q: IQuery<T>): Observable<T> => { 
     return null; 
    }; 
} 

,我还可以使用最新的Angular2快速启动plunker以及(在Quick Start Docs第一plunker链接)编译它。

检查app/main.ts文件中:

http://plnkr.co/edit/cedJly52HvfIoS2fpzkY?p=preview

(注:当编译失败,输出停留在“正在加载...”永远的,所以这就是你如何验证它编译)