2025-04-02 21:57:33 +08:00

72 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** 消费者接口 */
export interface IObserver<T, E, C> {
/** 用来接收 Observable 中的 next 类型通知 */
next: (value: T) => void;
/** 用来接收 Observable 中的 error 类型通知 */
error: (err: E) => void;
/** 用来接收 Observable 中的 complete 类型通知 */
complete: (res: C) => void;
}
export interface NextObserver<T, E, C> {
next: (value: T) => void;
error?: (err: E) => void;
complete?: (res: C) => void;
}
export interface ErrorObserver<T, E, C> {
next?: (value: T) => void;
error: (err: E) => void;
complete?: (res: C) => void;
}
export interface CompletionObserver<T, E, C> {
next?: (value: T) => void;
error?: (err: E) => void;
complete: (res: C) => void;
}
export declare type PartialObserver<T, E, C> = NextObserver<T, E, C> | ErrorObserver<T, E, C> | CompletionObserver<T, E, C>;
export interface IUnsubscribable {
/** 取消 observer 的订阅 */
unsubscribe(): void;
}
/** Subscription 的接口 */
export interface ISubscriptionLike extends IUnsubscribable {
readonly closed: boolean;
}
export declare type TeardownLogic = () => void;
export interface ISubscribable<T, E, C> {
subscribe(observer?: PartialObserver<T, E, C> | ((value: T) => void), error?: (error: any) => void, complete?: () => void): IUnsubscribable;
}
/** 表示可清理的资源,比如 Observable 的执行 */
declare class Subscription implements ISubscriptionLike {
/** 用来标示该 Subscription 是否被取消订阅的标示位 */
closed: boolean;
/** 清理 subscription 持有的资源 */
private _unsubscribe;
/** 取消 observer 的订阅 */
unsubscribe(): void;
/** 添加一个 tear down 在该 Subscription 的 unsubscribe() 期间调用 */
add(teardown: TeardownLogic): void;
}
/**
* 实现 Observer 接口并且继承 Subscription 类Observer 是消费 Observable 值的公有 API
* 所有 Observers 都转化成了 Subscriber以便提供类似 Subscription 的能力,比如 unsubscribe
*/
export declare class Subscriber<T, E, C> extends Subscription implements IObserver<T, E, C> {
protected isStopped: boolean;
protected destination: Partial<IObserver<T, E, C>>;
constructor(observerOrNext?: PartialObserver<T, E, C> | ((value: T) => void) | null, error?: ((err: E) => void) | null, complete?: ((res: C) => void) | null);
unsubscribe(): void;
next(value: T): void;
error(err: E): void;
complete(result: C): void;
}
/** 可观察对象,当前的上传事件的集合 */
export declare class Observable<T, E, C> implements ISubscribable<T, E, C> {
private _subscribe;
constructor(_subscribe: (subscriber: Subscriber<T, E, C>) => TeardownLogic);
subscribe(observer: PartialObserver<T, E, C>): Subscription;
subscribe(next: null | undefined, error: null | undefined, complete: (res: C) => void): Subscription;
subscribe(next: null | undefined, error: (error: E) => void, complete?: (res: C) => void): Subscription;
subscribe(next: (value: T) => void, error: null | undefined, complete: (res: C) => void): Subscription;
}
export {};