microsoft / microsoft/TypeScript

Rest tuple parameter with intersection/union places error on wrong argument

Offen
#28,505 2 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: Error Messages
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TypeScript Version: 3.2.0-dev.20181113

Search Terms:
rest tuple, intersection, union, error, argument, misplaced

Code

declare function boop<T extends any[]>(...args: T & [number, string]): void;
boop(123, 456); // error
//   ~~~ <-- error on first argument
// Argument of type '[123, 456]' is not assignable to parameter 
//   of type '[number, number] & [number, string]'.
// Type '[123, 456]' is not assignable to type '[number, string]'.
// Type '456' is not assignable to type 'string'.

Expected behavior:
I expect an error on the second argument (456), since that's the argument that causes the failure, as made evident by the error message. (Or possibly I expect an error on both arguments, if it's interpreted as a failure to match the rest parameter.)

Actual behavior:
The actual error is on the first argument (123). This is a minor problem, and it only seems to show up in the intersection-with-type-parameter situation above (concrete types like ...args: [number, string] & [number, string] work fine), but I figured I'd report it in case it has an easy fix.

(Note to self or interested non-selves: ran into this in a Stack Overflow answer)

Playground Link:
🔗

Related Issues:
Haven't found anything. Anyone find anything?

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

Beginnen Sie mit der bereitgestellten TypeScript Playground-Reproduktion und vergleichen Sie den gemeldeten Diagnosebereich mit dem erwarteten fehlschlagenden Argument. Verfolgen Sie die Verarbeitung von Rest-Tupel-Parametern in Kombination mit einer Schnittmenge von Typparametern durch den Compiler und überprüfen Sie anschließend, dass die Diagnose auf das zweite Argument zeigt, ohne den konkreten Schnittmengenfall 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
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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