2016-11-07 1 views
0

Ich benutze rxjs (5.0+) und ich möchte eine eigene Operator mit dem Namen append für Observable schreiben. Jetzt habe ich den Operator erfolgreich erstellt und es funktioniert, aber wie kann ich Typoskript sagen, dass das ursprüngliche Observable meinen neuen Operator unterstützt? weil es einen Compiler-Fehler wie unten beschweren:Wie erweitert man Rxjs um meinen eigenen Operator hinzuzufügen?

Property 'append' does not exist on type 'Observable'.

Es folgt mein Quellcode:


append.ts

Observable.prototype.append = function (value) { 
    return new Observable((observer) => { 
     const mapObserver = { 
      next: (x) => observer.next(x == null ? value : x + value), 
      error: (err) => observer.error(err), 
      complete:() => observer.complete() 
     }; 
     return this.subscribe(mapObserver); 
    }); 
}; 

test.ts

import './append'; 

export class Test { 
    init() { 
     Observable.from([1, 2]) 
      .append('a') // <--- Compile error! but in fact, it works. 
      .subscribe(function (x) { 
       console.log(x); // Works, output 1a and 2a 
      } 
     ); 
    } 
} 

Ich weiß, ich muss Typoskript über meine neue Operator erzählen, aber ich weiß nicht, wie es geht? Ich habe den Quellcode von rxjs überprüft und festgestellt, dass er folgenden Code in src/add/operator/map.ts enthält. Ich habe versucht, etwas ähnlichen Code in meine append.ts hinzuzufügen, aber ich weiß nicht, was der Modulname ist, der die Observable Schnittstelle enthält. (BTW, ich bin mit Typoskript 2.)

declare module '../../Observable' { 
    interface Observable<T> { 
    map: typeof map; 
    } 
} 

Antwort

3

Der Modulname in Ihrer Erklärung Verschmelzung angegeben sollte der gleiche wie der Modulname sein, der verwendet wurde, wenn Sie Observable importiert. Zum Beispiel:

import { Observable } from 'rxjs/Observable'; 

... 

declare module 'rxjs/Observable' { 
    interface Observable<T> { 
    map: typeof map; 
    } 
} 
Verwandte Themen