Angular 向RxJs 6订阅原型添加方法

Angular 向RxJs 6订阅原型添加方法,angular,rxjs,rxjs6,Angular,Rxjs,Rxjs6,使用rxjs@5,我们实现了一个方便的DisposeBag类来收集订阅,并在销毁角度组件时更容易取消订阅 import { Subscription } from "rxjs/Subscription"; export class DisposeBag { private _subscription: Subscription[] = []; insert(subscription: Subscription): void { this._subscripti

使用rxjs@5,我们实现了一个方便的DisposeBag类来收集订阅,并在销毁角度组件时更容易取消订阅

import { Subscription } from "rxjs/Subscription";

export class DisposeBag {
    private _subscription: Subscription[] = [];

    insert(subscription: Subscription): void {
        this._subscription.push(subscription);
    }

    dispose() {
        this._subscription.forEach(subscription => {
            subscription.unsubscribe();
        });
        this._subscription = [];
    }
}

export function disposedBy(this: Subscription, bag: DisposeBag): void {
    bag.insert(this);
}

Subscription.prototype.disposedBy = disposedBy;

declare module "rxjs/Subscription" {
    interface Subscription {
        disposedBy: typeof disposedBy;
    }
}
升级到rxjs@6+rxjs-compat@6,我们得到以下编译错误:

(12)类型“订阅”上不存在属性“unsubscribe”。
(22)“订阅”仅指类型,但在此处用作值。

将第一次导入切换到

从“rxjs”导入{Subscription}

解决这两个错误,但在类型“Subscription”上引入了一个
(22)属性“disposedBy”。
错误

我们如何解决这个问题?

感谢您的回答,我可以这样解决它:

import { Subscription } from "rxjs";

export class DisposeBag {
    private _subscription: Subscription[] = [];

    insert(subscription: Subscription): void {
        this._subscription.push(subscription);
    }

    dispose() {
        this._subscription.forEach(subscription => {
            subscription.unsubscribe();
        });
        this._subscription = [];
    }
}

export function disposedBy(this: Subscription, bag: DisposeBag): void {
    bag.insert(this);
}

Subscription.prototype.disposedBy = disposedBy;

declare module "rxjs/internal/Subscription" {
    interface Subscription {
        disposedBy: typeof disposedBy;
    }
}

为什么不将takeUntil与销毁时发出的主题一起使用呢?似乎您还重新声明了模块以修改接口。更改导入后,您是否也更改了此重新声明?@IngoBürk此类目前在100多个站点中使用,因此我们希望尽可能保持其完整性。@Vlad274将顶部导入和模块声明更改为“rxjs”会产生相同的两个错误。