microsoft / microsoft/TypeScript

Assigning array values by index treats Array<A> | Array<B> as Array<A | B>

Offen
#38,445 8 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

In Discussion Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TypeScript Version: 4.0.0-dev.201xxxxx
reproducible starting from at least 3.3.3

Search Terms: discriminated unions, distributive

Code

// A *self-contained* demonstration of the problem follows...
// Test this by running `tsc` on the command-line, rather than through another build tool such as Gulp, Webpack, etc.

function main() {
    var a: (number[] | string[])  = []; 
    a[0] = 3;
    a[1] = "xxx";
}

Expected behavior:
error TS2322: Type '"xxx"' is not assignable to type 'number'.

Actual behavior:
All is compiled without warnings or errors.
Keep in mind that this works as expected:

var a: (number[] | string[])  = [3, "xxx"]; // Not OK as it should be 

Thus, depending on how exactly we're initialising the array, behaviour differs.
Playground Link:
https://www.typescriptlang.org/play?ts=4.0.0-dev.20200508#code/C4TwDgpgBAggTnAcgVwLYGVhygXigOzQCMI4BtAXSgB8oBnLAS3wHNKBuAKE4DNl8AxsEYB7fFFQBDZgAoAlFADenKKqgA3SdkkAuKDMKoS5KrQZxmbCgtxQOUFWslkADFTwBmLmqjOAjO5QAEQAHmFBXAC+nEA

Related Issues:

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem eigenständigen TypeScript-Reproducer und führe ihn über die Kommandozeile mit tsc aus, wobei du indizierte Zuweisungen mit der Initialisierung durch Array-Literale vergleichst. Das Issue nennt keine Quelldateien oder Tests; verfolge daher den Checker-Pfad für indizierte Zuweisungen auf einer Union von Array-Typen. Als abgeschlossen gilt die Aufgabe, wenn die reproduzierte Zuweisung den erwarteten Typfehler meldet, ohne das zugehörige Initialisierungsverhalten zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.