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?: any) => 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): Subscription }