1import { Observable } from './Observable'; 2import { Subscription } from './Subscription'; 3 4/** OPERATOR INTERFACES */ 5 6export interface UnaryFunction<T, R> { (source: T): R; } 7 8export interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Observable<R>> {} 9 10export type FactoryOrValue<T> = T | (() => T); 11 12export interface MonoTypeOperatorFunction<T> extends OperatorFunction<T, T> {} 13 14export interface Timestamp<T> { 15 value: T; 16 timestamp: number; 17} 18 19export interface TimeInterval<T> { 20 value: T; 21 interval: number; 22} 23 24/** SUBSCRIPTION INTERFACES */ 25 26export interface Unsubscribable { 27 unsubscribe(): void; 28} 29 30export type TeardownLogic = Unsubscribable | Function | void; 31 32export interface SubscriptionLike extends Unsubscribable { 33 unsubscribe(): void; 34 readonly closed: boolean; 35} 36 37export type SubscribableOrPromise<T> = Subscribable<T> | Subscribable<never> | PromiseLike<T> | InteropObservable<T>; 38 39/** OBSERVABLE INTERFACES */ 40 41export interface Subscribable<T> { 42 subscribe(observer?: PartialObserver<T>): Unsubscribable; 43 /** @deprecated Use an observer instead of a complete callback */ 44 subscribe(next: null | undefined, error: null | undefined, complete: () => void): Unsubscribable; 45 /** @deprecated Use an observer instead of an error callback */ 46 subscribe(next: null | undefined, error: (error: any) => void, complete?: () => void): Unsubscribable; 47 /** @deprecated Use an observer instead of a complete callback */ 48 subscribe(next: (value: T) => void, error: null | undefined, complete: () => void): Unsubscribable; 49 subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable; 50} 51 52export type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>; 53 54/** @deprecated use {@link InteropObservable } */ 55export type ObservableLike<T> = InteropObservable<T>; 56 57export type InteropObservable<T> = { [Symbol.observable]: () => Subscribable<T>; }; 58 59/** OBSERVER INTERFACES */ 60 61export interface NextObserver<T> { 62 closed?: boolean; 63 next: (value: T) => void; 64 error?: (err: any) => void; 65 complete?: () => void; 66} 67 68export interface ErrorObserver<T> { 69 closed?: boolean; 70 next?: (value: T) => void; 71 error: (err: any) => void; 72 complete?: () => void; 73} 74 75export interface CompletionObserver<T> { 76 closed?: boolean; 77 next?: (value: T) => void; 78 error?: (err: any) => void; 79 complete: () => void; 80} 81 82export type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | CompletionObserver<T>; 83 84export interface Observer<T> { 85 closed?: boolean; 86 next: (value: T) => void; 87 error: (err: any) => void; 88 complete: () => void; 89} 90 91/** SCHEDULER INTERFACES */ 92 93export interface SchedulerLike { 94 now(): number; 95 schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay?: number, state?: T): Subscription; 96} 97export interface SchedulerAction<T> extends Subscription { 98 schedule(state?: T, delay?: number): Subscription; 99} 100 101export type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never; 102 103export type ObservedValuesFromArray<X> = X extends Array<ObservableInput<infer T>> ? T : never; 104