1

rxjs:5.0.0-beta.2 打字稿:1.8 Angular2:beta-9

我正在尝试模拟一个 http 服务类,但在扩展类时遇到问题,如 angular 2 文档中所述。

似乎您无法覆盖返回类型化可观察对象的方法?我错过了什么?

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>

谢谢!

4

1 回答 1

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 plunker 编译它(Quick Start Docs中的第一个 plunker 链接)。

检查app/main.ts文件:

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

(注意:当编译失败时,输出永远停留在“Loading...”,所以你可以通过它来验证它是否已编译)

于 2016-05-18T14:12:10.110 回答