export type OnNext = (value: T) => void | undefined; // OnNext callbacks should never return a value export type OnMultiNext = ([S1, S2, S3, S4, S5]: Args) => void | undefined; export type Mapper = (next: Other, currentValue: Mine) => Mine extends void ? 'A map function must return a value. Check your map function and ensure it has a valid return statement.' : Mine; export type Unsubscribe = () => void; export interface Observable { value: T; subscribe(onNext: OnNext): Unsubscribe; } export type ObservedValues = { [K in keyof T]: T[K] extends Observable ? R : never }; export type MultiMapper = ( [S1, S2, S3, S4, S5]: Args, currentValue: Mine, ) => Mine; export type Observables = [Observable, Observable] | [Observable, Observable, Observable] | [Observable, Observable, Observable, Observable] | [Observable, Observable, Observable, Observable, Observable]; export type Args = [A1, A2] | [A1, A2, A3] | [A1, A2, A3, A4] | [A1, A2, A3, A4, A5];