Skip to content

Inference of [a,b] to union type array is missing index signature [0]:A and [1]:B #9216

Closed
@hansmaad

Description

When calling a method declared as all<T1, T2>(values: [T1, T2]); I cannot use a union type array.

TypeScript Version:

1.8.10

Code
OK:

$q.all([a, b]).then(/*...*/);

Error:

var promises = [a, b];
$q.all(promises).then(/*...*/);

> TS2329 Index signature is missing in type '(IPromise<A> | IPromise<B>)[]'

Expected behavior:
It would be nice if both versions work, without explicitly reference types A and B. I think the problem is, that [a, b] infers to (A|B)[] instead of [A,B], which should prevent me from [a,b].push(new C()) (Is this the intension?). The problem is, that (A|B)[] looses the indexers [0]: A and [1]: B. I think that's what the error message wants to say?
Would it be possible to infer [a, b] to something like (A|B)[A, B] which is compatible to

interface IAB {
    [i:number]: A|B;
    [0]:A;
    [1]:B;
}

Btw. the error message is rather confusing, since (A|B)[] actually has an index signature.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Design LimitationConstraints of the existing architecture prevent this from being fixed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions