export interface Subscription { closed: boolean; unsubscribe:() => void } export type ObserverStart = (subscription: Subscription) => void export type ObserverNext = (() => void) | ((value: T) => void) export type ObserverError = (error: Error) => void export type ObserverComplete = (value?) => void; export interface SubscriptionObserver { closed: boolean; error: ObserverError; complete: ObserverComplete; next: ObserverNext; } interface OptionalObserver { start?: ObserverStart; error?: ObserverError; complete?: ObserverComplete; next?: ObserverNext; } export type SloppyObserver = OptionalObserver | ObserverNext export type SubscriberFunction = (observer: SubscriptionObserver) => Subscription | { unsubscribe: () => void } | (() => void) | void; export class Observable { public constructor(callback: SubscriberFunction); public subscribe(observer: SloppyObserver); }