Angular6打字稿扩展方法Observable <t>

时间:2018-10-26 13:59:14

标签: typescript angular6 extension-methods

我正在尝试在Observable上做一个扩展方法

df1
     Name   Age     Sex
0     Tom    34      M
1     Sara   18     NaN
2     Eva    44      F
3     Jack   27      M
4     Laura  30     NaN

但是,我总是遇到编译错误

import { Observable } from 'rxjs/Observable';

declare module 'rxjs/Observable' {
  interface Observable<T> {
    customFilter<T>(this: Observable<T>): Observable<T>;
  }
}

function customFilter<T>(this: Observable<T>) {
  return this;
}

Observable.prototype.customFilter = customFilter;

这是我的tsconfig.app.json

ERROR in src/app/utils/observable.extensions.ts(13,1): error TS2693: 'Observable' only refers to a type, but is being used as a value here.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是一个微妙的。 rxjs/Observable模块包含:

export * from 'rxjs-compat/Observable';

您对名为Observable的已导出接口的扩充正在阻止export *语句从Observable中重新导出rxjs-compat/Observable,就像export interface Observable<T> { ... }直接写在rxjs/Observable模块中。 (也许编译器应该在发生这种情况时报告错误。为此,an issue曾一度为此打开过,但由于没有明确说明为何无法报告该错误而关闭了它。)因此,从Observable导出的rxjs/Observable的定义仅是扩充中的接口;没有值的含义。

解决方法是将扩展更改为目标rxjs/internal/Observable(最初声明了Observable类)而不是rxjs/Observable,以便您的界面与原始类正确合并。 / p>