/
interfaces.ts
47 lines (33 loc) · 1.36 KB
/
interfaces.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { IReadonlyList } from '../../misc/readonly-list/interfaces';
import { IObservable } from '../observable/interfaces';
import { TObserverObserveResultNonCyclic } from './types';
/** INTERFACES **/
export interface IObserverConstructor {
new<T>(onEmit: (value: T, observable?: IObservable<T>) => void): IObserver<T>;
}
export interface IObserverTypedConstructor<T> {
new(onEmit: (value: T, observable?: IObservable<T>) => void): IObserver<T>;
}
/**
* A Observer is a push destination: it receives data though 'emit'
*/
export interface IObserver<T> {
// true if Observer is activated
readonly activated: boolean;
// list of Observables observed by this Observer
readonly observables: IReadonlyList<IObservable<T>>;
// true if Observer is observing at least one Observable
readonly observing: boolean;
// emit a value
emit(value: T, observable?: IObservable<T>): void;
// activates the Observer
activate(): this;
// deactivates the Observer
deactivate(): this
// observes a list of Observables
observe<O extends IObservable<any>[]>(...observables: O): TObserverObserveResultNonCyclic<O, T, this>; // returns this
// stops observing a list of Observables
unobserve<O extends IObservable<any>[]>(...observables: O): TObserverObserveResultNonCyclic<O, T, this>; // returns this
// stops observing all its Observables
disconnect(): this;
}