Skip to content

Commit

Permalink
fix: use empty object type in combineLatest/forkJoin sigs (#5832)
Browse files Browse the repository at this point in the history
* test: add failing dtslint tests

* fix: use empty object type

* chore: improve test descriptions

* chore: remove accidental whitespace

* chore: spelling

* chore: remove tslint line-length comment

* chore: rebase properly

* chore: update api_guardian
  • Loading branch information
cartant committed Oct 25, 2020
1 parent 36b4762 commit 22aaaa2
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 5 deletions.
8 changes: 6 additions & 2 deletions api_guard/dist/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ export declare function bindNodeCallback<A extends readonly unknown[], R extends
export declare function combineLatest(sources: []): Observable<never>;
export declare function combineLatest<A extends readonly unknown[]>(sources: readonly [...ObservableInputTuple<A>]): Observable<A>;
export declare function combineLatest<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;
export declare function combineLatest(sourcesObject: {}): Observable<never>;
export declare function combineLatest(sourcesObject: {
[K in any]: never;
}): Observable<never>;
export declare function combineLatest<T>(sourcesObject: T): Observable<{
[K in keyof T]: ObservedValueOf<T[K]>;
}>;
Expand Down Expand Up @@ -166,7 +168,9 @@ export declare function firstValueFrom<T>(source: Observable<T>): Promise<T>;
export declare function forkJoin(sources: []): Observable<never>;
export declare function forkJoin<A extends readonly unknown[]>(sources: readonly [...ObservableInputTuple<A>]): Observable<A>;
export declare function forkJoin<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;
export declare function forkJoin(sourcesObject: {}): Observable<never>;
export declare function forkJoin(sourcesObject: {
[K in any]: never;
}): Observable<never>;
export declare function forkJoin<T>(sourcesObject: T): Observable<{
[K in keyof T]: ObservedValueOf<T[K]>;
}>;
Expand Down
5 changes: 5 additions & 0 deletions spec-dtslint/observables/combineLatest-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,9 @@ describe('combineLatest({})', () => {
it('should work for the simple case', () => {
const res = combineLatest({ foo: a$, bar: b$, baz: c$ }); // $ExpectType Observable<{ foo: A; bar: B; baz: C; }>
});

it('should not rely upon the excess-properties behavior to identify empty objects', () => {
const obj = { foo: a$, bar: b$, baz: c$ };
const res = combineLatest(obj); // $ExpectType Observable<{ foo: A; bar: B; baz: C; }>
});
});
5 changes: 5 additions & 0 deletions spec-dtslint/observables/forkJoin-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ describe('forkJoin({})', () => {
it('should work for the simple case', () => {
const res = forkJoin({ foo: of(1), bar: of('two'), baz: of(false) }); // $ExpectType Observable<{ foo: number; bar: string; baz: boolean; }>
});

it('should not rely upon the excess-properties behavior to identify empty objects', () => {
const obj = { foo: of(1), bar: of('two'), baz: of(false) };
const res = forkJoin(obj); // $ExpectType Observable<{ foo: number; bar: string; baz: boolean; }>
});
});

describe('forkJoin([])', () => {
Expand Down
2 changes: 1 addition & 1 deletion src/internal/observable/combineLatest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export function combineLatest<A extends readonly unknown[]>(sources: readonly [.
export function combineLatest<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;

// combineLatest({a, b, c})
export function combineLatest(sourcesObject: {}): Observable<never>;
export function combineLatest(sourcesObject: { [K in any]: never }): Observable<never>;
export function combineLatest<T>(sourcesObject: T): Observable<{ [K in keyof T]: ObservedValueOf<T[K]> }>;

// If called with a single array, it "auto-spreads" the array, with result selector
Expand Down
3 changes: 1 addition & 2 deletions src/internal/observable/forkJoin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@ export function forkJoin<A extends readonly unknown[]>(sources: readonly [...Obs
export function forkJoin<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A>;

// forkJoin({a, b, c})
export function forkJoin(sourcesObject: {}): Observable<never>;
export function forkJoin(sourcesObject: { [K in any]: never }): Observable<never>;
export function forkJoin<T>(sourcesObject: T): Observable<{ [K in keyof T]: ObservedValueOf<T[K]> }>;

// forkJoin(a, b, c, resultSelector)
/** @deprecated resultSelector is deprecated, pipe to map instead */

export function forkJoin(...args: Array<ObservableInput<any> | ((...args: any[]) => any)>): Observable<any>;

/**
Expand Down

0 comments on commit 22aaaa2

Please sign in to comment.