diff --git a/spec-dtslint/observables/combineLatest-spec.ts b/spec-dtslint/observables/combineLatest-spec.ts index 86c98de52b..8da35b6788 100644 --- a/spec-dtslint/observables/combineLatest-spec.ts +++ b/spec-dtslint/observables/combineLatest-spec.ts @@ -92,6 +92,10 @@ it('should have basic support for 7 or more params', () => { const o = combineLatest([a$, b$, c$, d$, e$, f$, g$]); // $ExpectType Observable<(A | B | C | D | E | F | G)[]> }); +it('should have full support for 7 or more params with readonly tuples', () => { + const o = combineLatest([a$, b$, c$, d$, e$, f$, g$] as const); // $ExpectType Observable +}); + it('should handle an array of Observables', () => { const o = combineLatest([a$, a$, a$, a$, a$, a$, a$, a$, a$, a$, a$]); // $ExpectType Observable }); diff --git a/src/internal/observable/combineLatest.ts b/src/internal/observable/combineLatest.ts index 14841a636d..0f56298627 100644 --- a/src/internal/observable/combineLatest.ts +++ b/src/internal/observable/combineLatest.ts @@ -1,5 +1,5 @@ import { Observable } from '../Observable'; -import { ObservableInput, SchedulerLike, ObservedValueOf } from '../types'; +import { ObservableInput, SchedulerLike, ObservedValueOf, ObservedValueTupleFromArray } from '../types'; import { isScheduler } from '../util/isScheduler'; import { isArray } from '../util/isArray'; import { Subscriber } from '../Subscriber'; @@ -67,6 +67,7 @@ export function combineLatest, O2 extends Observ export function combineLatest, O2 extends ObservableInput, O3 extends ObservableInput, O4 extends ObservableInput, O5 extends ObservableInput>(sources: [O1, O2, O3, O4, O5]): Observable<[ObservedValueOf, ObservedValueOf, ObservedValueOf, ObservedValueOf, ObservedValueOf]>; export function combineLatest, O2 extends ObservableInput, O3 extends ObservableInput, O4 extends ObservableInput, O5 extends ObservableInput, O6 extends ObservableInput>(sources: [O1, O2, O3, O4, O5, O6]): Observable<[ObservedValueOf, ObservedValueOf, ObservedValueOf, ObservedValueOf, ObservedValueOf, ObservedValueOf]>; export function combineLatest>(sources: O[]): Observable[]>; +export function combineLatest[]>(sources: O): Observable>; // Standard calls /** @deprecated Pass arguments in a single array instead `combineLatest([a, b, c])` */ diff --git a/src/internal/types.ts b/src/internal/types.ts index 0dfdaee58b..2ddd7004fa 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -201,7 +201,7 @@ export type ObservedValuesFromArray = ObservedValueUnionFromArray; * of `[string, number]`. */ export type ObservedValueTupleFromArray = - X extends Array> + X extends readonly ObservableInput[] ? { [K in keyof X]: ObservedValueOf } : never; @@ -246,4 +246,4 @@ export type ValueFromNotification = T extends { kind: 'N'|'E'|'C' } ? (T extends NextNotification ? (T extends { value: infer V } ? V : undefined ) : never) - : never; \ No newline at end of file + : never;