angular - Adding method to RxJs 6 Subscription prototype
问题描述
Using rxjs@5, we implemented a convenient DisposeBag class to gather Subscriptions and make it easier to unsubscribe when destroying an Angular component.
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;
}
}
Upgrading to rxjs@6 + rxjs-compat@6, we get the following compile errors:
(12) Property 'unsubscribe' does not exist on type 'Subscription'.
(22) 'Subscription' only refers to a type, but is being used as a value here.
Switching the 1st import to
import { Subscription } from "rxjs";
solves both errors but introduces a (22) Property 'disposedBy' does not exist on type 'Subscription'.
error.
How can we fix this?
解决方案
感谢这个答案,我能够像这样修复它:
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;
}
}
推荐阅读
- c# - 更新表单中的集合值
- mysql - 我无法使用 DataGrip 数据库客户端从本地主机连接到 docker 中的 mysql
- javascript - 将上传的图片显示到html中的div
- c++ - main 中的 C++ 类循环
- c# - 当我使用视图创建控制器时,使用 EF 核心数据库上下文(应用程序数据库上下文)没有进入 asp.net 核心
- flutter - 如何在 Flutter 的灵活小部件中使用 flex 参数?
- node.js - 如何安装 numjs
- c++ - 给定 C++ 代码的时间复杂度是多少?
- cakephp - CakePHP 只本地化部分页面
- java - Java 将 Map 内的 Map 转换为单个聚合 Map