Rap*_*aël 2 extension-methods typescript angular6
我正在尝试在 Observable 上做一个扩展方法
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;
Run Code Online (Sandbox Code Playgroud)
但是我总是收到编译错误
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.
Run Code Online (Sandbox Code Playgroud)
这是我的 tsconfig.app.json
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"module": "es6",
"types": [],
"paths": {
"@angular/*": [
"../node_modules/@angular/*"
]
}
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
这是一个微妙的。该rxjs/Observable模块包含:
export * from 'rxjs-compat/Observable';
Run Code Online (Sandbox Code Playgroud)
您导出接口的增强命名Observable挡住了export *从转口声明Observable从rxjs-compat/Observable,就好像export interface Observable<T> { ... }已经中直接写入rxjs/Observable模块。(也许编译器在发生这种情况时应该报告错误。曾经有一个关于此的问题,但它在没有明确说明为什么无法报告错误的情况下关闭。)因此,唯一的定义是Observable导出的rxjs/Observable是您的增强中的接口;没有价值意义。
解决方法是将您的扩充更改为 target rxjs/internal/Observable(Observable最初声明类的位置)而不是rxjs/Observable,以便您的界面与原始类正确合并。
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |