rxjs: 5.0.0-Beta2类型脚本: 1.8 Angular2: beta-9
我试图模拟一个http服务类,但在扩展这个类时遇到了问题,如angular 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>,则有效。
谢谢!
发布于 2016-05-18 22:12:10
我不认为问题出在您指出的代码中。可能在实际代码中的导入中或其他什么地方。
以下代码在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
(注意:当编译失败时,输出停留在“正在加载...”永远不变,所以这就是你验证它编译的方式)
https://stackoverflow.com/questions/37275330
复制相似问题