export interface ISubscriber { notify(): Promise; dispose(recursive?: boolean): void; } export interface ISubscriberFunction { (n: T, o?: T): void; } export interface IObservable { id: number; subscribers: (ISubscriber | ISubscriberFunction)[]; value: T; alwaysNotify: boolean; getValue(): T; peek(): T; peekDirty(): T; track(): Promise; setValue(value: T): Promise; subscribeOnly(subscriber: ISubscriber | ISubscriberFunction): void; subscribe(subscriber: ISubscriber | ISubscriberFunction): void; unsubscribe(subscriber: ISubscriber | ISubscriberFunction): void; publish(value: T, oldValue?: T): Promise; dispose(recursive?: boolean): void; } export interface IArray extends Array { set?: (index: number, value: T) => void; } export interface IHash { [index: string]: T; }