【问题标题】:Angular6 typescript extension method Observable<T>Angular6 打字稿扩展方法 Observable<T>
【发布时间】:2018-10-26 13:59:13
【问题描述】:

我正在尝试在 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"
  ]
}

有什么想法吗?

【问题讨论】:

  • 您正在导入Observable,一个类型,并修改它(暗示它是一个值)。如果我没记错的话,这是无法做到的。

标签: typescript angular6 extension-methods


【解决方案1】:

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

export * from 'rxjs-compat/Observable';

您对名为Observable 的导出接口的扩充阻止了export * 语句从rxjs-compat/Observable 重新导出Observable,就像export interface Observable&lt;T&gt; { ... } 直接写在rxjs/Observable 模块中一样。 (当这种情况发生时,编译器可能应该报告一个错误。曾经有过 an issue 对此开放,但它在没有明确说明为什么不能报告错误的情况下关闭。)因此,唯一的定义从rxjs/Observable 导出的Observable 是您扩充中的接口;没有可用的值含义。

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

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 2020-07-07
    • 1970-01-01
    • 2017-04-02
    • 2022-07-05
    • 1970-01-01
    • 2019-09-18
    • 2018-05-30
    • 2019-05-04
    相关资源
    最近更新 更多