Angular 向RxJs 6订阅原型添加方法
使用rxjs@5,我们实现了一个方便的DisposeBag类来收集订阅,并在销毁角度组件时更容易取消订阅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
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”会产生相同的两个错误。