diff --git a/types/kefir/index.d.ts b/types/kefir/index.d.ts index 09917d7846..e892e1b291 100644 --- a/types/kefir/index.d.ts +++ b/types/kefir/index.d.ts @@ -1,10 +1,14 @@ -// Type definitions for Kefir 3.3.0 +// Type definitions for Kefir 3.7.3 // Project: http://rpominov.github.io/kefir/ // Definitions by: Aya Morisawa +// Piotr Hitori Bosak // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.4 /// +export type ValueOfAnObservable> = T['']; + export interface Subscription { unsubscribe(): void; closed: boolean; // Actually, `readonly` but it's avaiable in tsc starting with 2.0.0 @@ -28,19 +32,25 @@ export interface Observer { } export interface Observable { + '': T; // TypeScript hack to enable value unwrapping for combine/flatMap + + toProperty(getCurrent?: () => T): Property; // Subscribe / add side effects - onValue(callback: (value: T) => void): void; - offValue(callback: (value: T) => void): void; - onError(callback: (error: S) => void): void; - offError(callback: (error: S) => void): void; - onEnd(callback: () => void): void; - offEnd(callback: () => void): void; - onAny(callback: (event: Event) => void): void; - offAny(callback: (event: Event) => void): void; - log(name?: string): void; - offLog(name?: string): void; + onValue(callback: (value: T) => void): this; + offValue(callback: (value: T) => void): this; + onError(callback: (error: S) => void): this; + offError(callback: (error: S) => void): this; + onEnd(callback: () => void): this; + offEnd(callback: () => void): this; + onAny(callback: (event: Event) => void): this; + offAny(callback: (event: Event) => void): this; + log(name?: string): this; + spy(name?: string): this; + offLog(name?: string): this; + offSpy(name?: string): this; flatten(transformer?: (value: T) => U[]): Stream; - toPromise(PromiseConstructor?: any): any; + toPromise(): Promise; + toPromise>(PromiseConstructor: () => W): W; toESObservable(): any; // This method is designed to replace all other methods for subscribing observe(params: Observer): Subscription; @@ -49,11 +59,11 @@ export interface Observable { onError?: (error: S) => void, onEnd?: () => void ): Subscription; + setName(source: Observable, selfName: string): this; + setName(selfName: string): this; } export interface Stream extends Observable { - toProperty(getCurrent?: () => T): Property; - // Modify an stream map(fn: (value: T) => U): Stream; filter(predicate?: (value: T) => boolean): Stream; @@ -64,7 +74,8 @@ export interface Stream extends Observable { skipWhile(predicate?: (value: T) => boolean): Stream; skipDuplicates(comparator?: (a: T, b: T) => boolean): Stream; diff(fn?: (prev: T, next: T) => T, seed?: T): Stream; - scan(fn: (prev: T, next: T) => T, seed?: T): Stream; + scan(fn: (prev: T | W, next: T) => W): Stream; + scan(fn: (prev: W, next: T) => W, seed: W): Stream; delay(wait: number): Stream; throttle(wait: number, options?: { leading?: boolean, trailing?: boolean }): Stream; debounce(wait: number, options?: { immediate: boolean }): Stream; @@ -85,19 +96,21 @@ export interface Stream extends Observable { bufferWithTimeOrCount(interval: number, count: number, options?: { flushOnEnd: boolean }): Stream; transduce(transducer: any): Stream; withHandler(handler: (emitter: Emitter, event: Event) => void): Stream; - // Combine streams combine(otherObs: Stream, combinator?: (value: T, ...values: U[]) => W): Stream; zip(otherObs: Stream, combinator?: (value: T, ...values: U[]) => W): Stream; merge(otherObs: Stream): Stream; concat(otherObs: Stream): Stream; flatMap(transform: (value: T) => Stream): Stream; + flatMap>(): Stream, any>; flatMapLatest(fn: (value: T) => Stream): Stream; + flatMapLatest>(): Stream, any>; flatMapFirst(fn: (value: T) => Stream): Stream; + flatMapFirst>(): Stream, any>; flatMapConcat(fn: (value: T) => Stream): Stream; + flatMapConcat>(): Stream, any>; flatMapConcurLimit(fn: (value: T) => Stream, limit: number): Stream; flatMapErrors(transform: (error: S) => Stream): Stream; - // Combine two streams filterBy(otherObs: Observable): Stream; sampledBy(otherObs: Observable, combinator?: (a: T, b: U) => W): Stream; @@ -110,7 +123,6 @@ export interface Stream extends Observable { export interface Property extends Observable { changes(): Stream; - // Modify an property map(fn: (value: T) => U): Property; filter(predicate?: (value: T) => boolean): Property; @@ -141,19 +153,20 @@ export interface Property extends Observable { bufferWithTimeOrCount(interval: number, count: number, options?: { flushOnEnd: boolean }): Property; transduce(transducer: any): Property; withHandler(handler: (emitter: Emitter, event: Event) => void): Property; - // Combine properties combine(otherObs: Property, combinator?: (value: T, ...values: U[]) => W): Property; zip(otherObs: Property, combinator?: (value: T, ...values: U[]) => W): Property; merge(otherObs: Property): Property; concat(otherObs: Property): Property; flatMap(transform: (value: T) => Property): Property; + flatMap>(): Property, any>; flatMapLatest(fn: (value: T) => Property): Property; + flatMapLatest>(): Property, any>; flatMapFirst(fn: (value: T) => Property): Property; + flatMapFirst>(): Property, any>; flatMapConcat(fn: (value: T) => Property): Property; flatMapConcurLimit(fn: (value: T) => Property, limit: number): Property; flatMapErrors(transform: (error: S) => Property): Property; - // Combine two properties filterBy(otherObs: Observable): Property; sampledBy(otherObs: Observable, combinator?: (a: T, b: U) => W): Property; @@ -165,8 +178,8 @@ export interface Property extends Observable { } export interface ObservablePool extends Observable { - plug(obs: Observable): void; - unPlug(obs: Observable): void; + plug(obs: Observable): this; + unPlug(obs: Observable): this; } export interface Event { @@ -197,11 +210,21 @@ export declare function fromESObservable(observable: any): Stream // Create a property export declare function constant(value: T): Property; export declare function constantError(error: T): Property; -export declare function fromPromise(promise: any): Property; - +export declare function fromPromise(promise: Promise): Property; // Combine observables -export declare function combine(obss: Observable[], passiveObss: Observable[], combinator?: (...values: T[]) => U): Observable; -export declare function combine(obss: Observable[], combinator?: (...values: T[]) => U): Observable; +export declare function combine(obss: Observable[], passiveObss: Observable[], combinator?: (...values: T[]) => U): Stream; +export declare function combine(obss: Observable[], combinator: (...values: T[]) => U): Stream; +export declare function combine }>(obss: T): Stream<{ [P in keyof T]: ValueOfAnObservable }, any>; +export declare function combine], P extends keyof T>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine, Observable]>(obss: T): Stream<[ValueOfAnObservable, ValueOfAnObservable], any>; +export declare function combine]>(obss: T): Stream<[ValueOfAnObservable], any>; +export declare function combine(obss: T): Stream; export declare function zip(obss: Observable[], passiveObss?: Observable[], combinator?: (...values: T[]) => U): Observable; export declare function merge(obss: Observable[]): Observable; export declare function concat(obss: Observable[]): Observable;