diff --git a/spec-dtslint/observables/combineLatest-spec.ts b/spec-dtslint/observables/combineLatest-spec.ts index 065a41dcf51..64eb64b193f 100644 --- a/spec-dtslint/observables/combineLatest-spec.ts +++ b/spec-dtslint/observables/combineLatest-spec.ts @@ -88,8 +88,8 @@ it('should accept 6 params', () => { const o = combineLatest([a$, b$, c$, d$, e$, f$]); // $ExpectType Observable<[A, B, C, D, E, F]> }); -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', () => { diff --git a/src/internal/observable/combineLatest.ts b/src/internal/observable/combineLatest.ts index c9c0e0a0aaf..5380fcf44f9 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 6163132ae94..7a0b96e3533 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -165,7 +165,7 @@ export type ObservedValuesFromArray = ObservedValueUnionFromArray; * of `[string, number]`. */ export type ObservedValueTupleFromArray = - X extends Array> + X extends readonly ObservableInput[] ? { [K in keyof X]: ObservedValueOf } : never; @@ -201,4 +201,4 @@ export type Tail = * If you have `T extends Array`, and pass a `string[]` to it, * `ValueFromArray` will return the actual type of `string`. */ -export type ValueFromArray = A extends Array ? T : never; \ No newline at end of file +export type ValueFromArray = A extends Array ? T : never;