rxjs:5.0.0-beta.2 打字稿:1.8 Angular2:beta-9
我正在尝试模拟一个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 :(得分:0)
我认为问题出在您指出的代码中。也许在实际代码中的导入或其他东西。
以下代码在typeScript ^ 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快速启动插件编译它(Quick Start Docs中的第一个插件链接)。
检查以下app/main.ts
文件:
http://plnkr.co/edit/cedJly52HvfIoS2fpzkY?p=preview
(注意:当编译失败时,输出将永远保持在“正在加载...”,这样就可以验证它是如何编译的了)