diff --git a/types/zen-observable/esm.d.ts b/types/zen-observable/esm.d.ts new file mode 100644 index 0000000000..786e2e639d --- /dev/null +++ b/types/zen-observable/esm.d.ts @@ -0,0 +1,14 @@ +import Observable = require('.'); + +/** + * @see https://github.com/zenparsing/zen-observable/blob/master/esm.js + */ +export default Observable; +export { Observable }; +export * from './extras'; + +export type SubscriptionObserver = ZenObservable.SubscriptionObserver; +export type Subscription = ZenObservable.Subscription; +export type Observer = ZenObservable.Observer; +export type Subscriber = ZenObservable.Subscriber; +export type ObservableLike = ZenObservable.ObservableLike; diff --git a/types/zen-observable/extras.d.ts b/types/zen-observable/extras.d.ts new file mode 100644 index 0000000000..ccacdda7f4 --- /dev/null +++ b/types/zen-observable/extras.d.ts @@ -0,0 +1,97 @@ +import Observable = require('.'); + +export function merge(): Observable; +export function merge(a: ZenObservable.ObservableLike): Observable; +export function merge(a: ZenObservable.ObservableLike, b: ZenObservable.ObservableLike): Observable; +export function merge( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, +): Observable; +export function merge( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, +): Observable; +export function merge( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, +): Observable; +export function merge( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, + f: ZenObservable.ObservableLike, +): Observable; +export function merge(...observables: Array>): Observable; + +export function combineLatest(): Observable; +export function combineLatest(a: ZenObservable.ObservableLike): Observable<[A]>; +export function combineLatest( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, +): Observable<[A, B]>; +export function combineLatest( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, +): Observable<[A, B, C]>; +export function combineLatest( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, +): Observable<[A, B, C, D]>; +export function combineLatest( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, +): Observable<[A, B, C, D, E]>; +export function combineLatest( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, + f: ZenObservable.ObservableLike, +): Observable<[A, B, C, D, E, F]>; +export function combineLatest(...observables: Array>): Observable; + +export function zip(): Observable; +export function zip(a: ZenObservable.ObservableLike): Observable<[A]>; +export function zip(a: ZenObservable.ObservableLike, b: ZenObservable.ObservableLike): Observable<[A, B]>; +export function zip( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, +): Observable<[A, B, C]>; +export function zip( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, +): Observable<[A, B, C, D]>; +export function zip( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, +): Observable<[A, B, C, D, E]>; +export function zip( + a: ZenObservable.ObservableLike, + b: ZenObservable.ObservableLike, + c: ZenObservable.ObservableLike, + d: ZenObservable.ObservableLike, + e: ZenObservable.ObservableLike, + f: ZenObservable.ObservableLike, +): Observable<[A, B, C, D, E, F]>; +export function zip(...observables: Array>): Observable; diff --git a/types/zen-observable/index.d.ts b/types/zen-observable/index.d.ts index 94ca94ccd2..c242b92fc9 100644 --- a/types/zen-observable/index.d.ts +++ b/types/zen-observable/index.d.ts @@ -3,6 +3,7 @@ // Definitions by: Kombu // JounQin // Thomas +// BenoitZugmeyer // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare global { @@ -40,10 +41,14 @@ declare global { } declare class Observable { - constructor(subscriber: ZenObservable.Subscriber) + constructor(subscriber: ZenObservable.Subscriber); subscribe(observer: ZenObservable.Observer): ZenObservable.Subscription; - subscribe(onNext: (value: T) => void, onError?: (error: any) => void, onComplete?: () => void): ZenObservable.Subscription; + subscribe( + onNext: (value: T) => void, + onError?: (error: any) => void, + onComplete?: () => void, + ): ZenObservable.Subscription; [Symbol.observable](): Observable; @@ -59,7 +64,6 @@ declare class Observable { static of(...items: R[]): Observable; } -declare namespace Observable { -} +declare namespace Observable {} export = Observable; diff --git a/types/zen-observable/test/esm.ts b/types/zen-observable/test/esm.ts new file mode 100644 index 0000000000..a32eb4d8ec --- /dev/null +++ b/types/zen-observable/test/esm.ts @@ -0,0 +1,83 @@ +import Observable, { Subscription, SubscriptionObserver, zip, combineLatest, merge } from 'zen-observable/esm'; + +// $ExpectType Subscription +let subscription = new Observable( + ( + // $ExpectType SubscriptionObserver + observer, + ) => { + observer.next(1); + observer.complete(); + }, +).subscribe( + ( + // $ExpectType number + val, + ) => {}, +); + +// zip +zip(Observable.of(1, 2, 3), Observable.of('a', 'b', 'c')).subscribe( + ( + // $ExpectType [number, string] + val, + ) => {}, +); + +zip().subscribe( + ( + // $ExpectType never + val, + ) => {}, +); + +zip(...[Observable.of(1)]).subscribe( + ( + // $ExpectType number[] + val, + ) => {}, +); + +// merge +merge(Observable.of(1, 2, 3), Observable.of('a', 'b', 'c')).subscribe( + ( + // $ExpectType string | number + val, + ) => {}, +); + +merge().subscribe( + ( + // $ExpectType never + val, + ) => {}, +); + +merge(...[Observable.of(1)]).subscribe( + ( + // $ExpectType number + val, + ) => {}, +); + +// combineLatest +combineLatest(Observable.of(1, 2, 3), Observable.of('a', 'b', 'c')).subscribe( + ( + // $ExpectType [number, string] + val, + ) => {}, +); + +combineLatest().subscribe( + ( + // $ExpectType never + val, + ) => {}, +); + +combineLatest(...[Observable.of(1)]).subscribe( + ( + // $ExpectType number[] + val, + ) => {}, +); diff --git a/types/zen-observable/zen-observable-tests.ts b/types/zen-observable/test/index.ts similarity index 76% rename from types/zen-observable/zen-observable-tests.ts rename to types/zen-observable/test/index.ts index b1aea6d46a..680306ea87 100644 --- a/types/zen-observable/zen-observable-tests.ts +++ b/types/zen-observable/test/index.ts @@ -13,25 +13,21 @@ function assert(val: boolean) { new Observable(observer => { [1, 2, 3].forEach(one => observer.next(one)); observer.complete(); -}) - .subscribe(val => assert(typeof val === 'number')); +}).subscribe(val => assert(typeof val === 'number')); /** * Observable.of */ -Observable.of(1, 2, 3) - .subscribe(val => assert(typeof val === 'number')); +Observable.of(1, 2, 3).subscribe(val => assert(typeof val === 'number')); /** * Observable.from */ -Observable.from(Observable.of(1, 2, 3)) - .subscribe(val => assert(typeof val === 'number')); +Observable.from(Observable.of(1, 2, 3)).subscribe(val => assert(typeof val === 'number')); -Observable.from([1, 2, 3]) - .subscribe(val => assert(typeof val === 'number')); +Observable.from([1, 2, 3]).subscribe(val => assert(typeof val === 'number')); Observable.from({ subscribe(observer: ZenObservable.SubscriptionObserver) { @@ -40,23 +36,20 @@ Observable.from({ }, [Symbol.observable](this: ZenObservable.ObservableLike) { return this; - } -}) - .subscribe(val => assert(typeof val === 'number')); + }, +}).subscribe(val => assert(typeof val === 'number')); Observable.from({ [Symbol.observable]() { return Observable.of(1, 2, 3); - } -}) - .subscribe(val => assert(typeof val === 'number')); + }, +}).subscribe(val => assert(typeof val === 'number')); /** * observable.forEach */ -Observable.of(1, 2, 3) - .forEach(val => assert(typeof val === 'number')); +Observable.of(1, 2, 3).forEach(val => assert(typeof val === 'number')); /** * observable.map @@ -99,8 +92,8 @@ Observable.of(1, 2, 3) */ Observable.of(1, 2, 3) -.concat(Observable.of(4, 5, 6), Observable.of(7, 8, 9)) -.subscribe(val => assert(typeof val === 'number')); + .concat(Observable.of(4, 5, 6), Observable.of(7, 8, 9)) + .subscribe(val => assert(typeof val === 'number')); /** * ZenObservable diff --git a/types/zen-observable/tsconfig.json b/types/zen-observable/tsconfig.json index d3daca16e3..b5026e2b77 100644 --- a/types/zen-observable/tsconfig.json +++ b/types/zen-observable/tsconfig.json @@ -18,6 +18,7 @@ }, "files": [ "index.d.ts", - "zen-observable-tests.ts" + "test/index.ts", + "test/esm.ts" ] }