2016-08-10 12 views
0

Ich möchte rxjs Observable erweitern. Ich folge den Anweisungen von https://www.typescriptlang.org/docs/handbook/declaration-merging.html und https://github.com/Microsoft/TypeScript/issues/2821Erweitern eines Typoskript-Moduls

Ich habe 2 Dateien:

rx.ts:

/// <reference path="./rx.d.ts" /> 

import { Observable } from 'rxjs/Rx'; 

Observable.prototype.trace = function() { 
    return this.do(x => console.log(x)) 
} 

rx.d.ts:

import 'rxjs/Rx' 

export { Observable } from 'rxjs/Rx'; 

declare module "rxjs/Rx" { 
    interface Observable<T> { 
     trace(): Observable<T>; 
     traceMessage(message: string): Observable<T>; 
    } 
} 

rx.ts Kompilation mit Meldung fehlschlägt Cannot find name 'Observable'.

Was mache ich falsch?

Antwort

0

Zuerst müssen Sie nicht in Ihre rx.d.ts-Datei exportieren. Dies sollte genug sein:

// rx.d.ts 
declare module "rxjs/Rx" { 
    interface Observable<T> { 
    trace(): Observable<T>; 
    traceMessage(message: string): Observable<T>; 
    } 
} 

Zweitens scheint es, als ob Sie versuchen, ein Gerät die Methode einer Schnittstelle hinzuzufügen. Sie sollten die Methode für die Klasse implementieren, die die Schnittstelle Observable beschreibt. Dies z. sollte gut kompilieren.

// rx.ts 
import { Observable } from 'rxjs/Rx'; 

let theObservable: Observable<any> 
theObservable.trace().trace().trace().trace()