2016-11-07 37 views
0

我使用的是rxjs (5.0+),我想寫一個我自己的Operator,其名稱爲append,用於Observable。現在我已經成功地創建了運算符並且它可以工作,但是如何告訴Typescript原始Observable支持我的新運算符?因爲它抱怨編譯錯誤象下面這樣:如何擴展rxjs來添加我自己的操作員?

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

以下是我的源代碼:


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 
      } 
     ); 
    } 
} 

我知道我需要告訴Typescript關於我的新Operator,但我不知道該怎麼做?我檢查了rxjs的源代碼,發現它包含以下代碼src/add/operator/map.ts。我試圖在我的append.ts中添加一些類似的代碼,但我不知道包含Observable接口的模塊名稱是什麼。 (順便說一句,我使用的打字稿2)

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

回答

3

在你的宣言合併指定的模塊名稱應該是一樣的,當你輸入Observable這是使用的模塊名稱。例如:

import { Observable } from 'rxjs/Observable'; 

... 

declare module 'rxjs/Observable' { 
    interface Observable<T> { 
    map: typeof map; 
    } 
} 
相關問題