export interface Subscription { closed?: boolean unsubscribe(): void } export interface NextObserver { closed?: boolean next: (value: T) => void error?: (reason: any) => void complete?: () => void start?: (subscription: Subscription) => void } export interface ErrorObserver { closed?: boolean next?: (value: T) => void error: (reason: any) => void complete?: () => void start?: (subscription: Subscription) => void } export interface CompletionObserver { closed?: boolean next?: (value: T) => void error?: (reason: any) => void complete: () => void start?: (subscription: Subscription) => void } export type PartialObserver = NextObserver | ErrorObserver | CompletionObserver export interface SubscriptionObserver { closed?: boolean next: (value: T) => void error: (reason: any) => void complete: () => void } export type Disposer = void | (() => void) | ({ unsubscribe: () => void }) | Subscription export type Subscriber = (observer: SubscriptionObserver) => Disposer export interface Subscribable { closed?: boolean subscribe( next?: PartialObserver | ((value: T) => void), error?: (reason: any) => void, complete?: () => void ): Subscription } export type Unary = (arg: T) => R export const enum SignalType { next, error, complete } export type ArrayValues = TS extends Array ? T : void