typescript - Angular6 typescript 扩展方法 Observable
问题描述
我正在尝试在 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;
但是我总是遇到编译错误
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.
这是我的 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"
]
}
任何想法 ?
解决方案
这是一个微妙的。该rxjs/Observable
模块包含:
export * from 'rxjs-compat/Observable';
您对名为的导出接口的扩充Observable
阻止了export *
从重新导出的语句Observable
,rxjs-compat/Observable
就像export interface Observable<T> { ... }
直接在rxjs/Observable
模块中编写一样。(当这种情况发生时,编译器可能应该报告一个错误。曾经有一个关于这个的问题公开,但是没有明确说明为什么不能报告错误就关闭了。)因此,唯一的定义从您的扩充中Observable
导出rxjs/Observable
的接口;没有可用的值含义。
解决方法是将您的扩充更改为 target rxjs/internal/Observable
(Observable
最初声明类的位置)而不是rxjs/Observable
,以便您的界面正确地与原始类合并。
推荐阅读
- python - 加载模型后如何将图形与 keras 连接?
- javascript - 如何匹配 C# 和 JS CryptoJS 生成的 Key & IV
- python - 连接到 Google 云 API 时如何修复“google.api_core.exceptions.ServiceUnavailable: 503 Connect Failed”
- vue.js - Vuetify 组合框 - 如何禁用在 Vuetify 的组合框中输入
- javascript - 如何使用 columnTruncateLength:232 和 numFramesPerSpectrogram:43 将 wav 文件转换为 tensorflowjs 的频谱图?
- docker - Docker 容器没有列出我拉取的容器?
- laravel - 同一个ip地址如何设置不带端口号的域名和子域名?
- angularjs - 无法从服装指令中分配默认值来选择控件
- r - 如何在 R 中为具有大名的类别制作条形图(直方图)?
- bootstrap-4 - 如何在不使用css的情况下在引导程序中将标签向右对齐