我想扩展rxjs Observable
。
我按照https://www.typescriptlang.org/docs/handbook/declaration-merging.html和https://github.com/Microsoft/TypeScript/issues/2821
我有2个文件:
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
编译失败,并显示消息Cannot find name 'Observable'.
我做错了什么?
答案 0 :(得分:0)
首先,无需在rx.d.ts文件中导出。这应该足够了:
// rx.d.ts
declare module "rxjs/Rx" {
interface Observable<T> {
trace(): Observable<T>;
traceMessage(message: string): Observable<T>;
}
}
其次,您似乎正在尝试添加一个接口方法的工具。您应该在Observable
接口描述的类上实现该方法。这个例如。应该编译得很好。
// rx.ts
import { Observable } from 'rxjs/Rx';
let theObservable: Observable<any>
theObservable.trace().trace().trace().trace()