microsoft / microsoft/TypeScript

Incorrectly typed argument variant

Offen
#37,580 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: check: Type Inference
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.8.3

Search Terms:

Parameters, Array, Overloading, Type inference

Code


type VariantA = [(err: Error, data: string) => any]
type VariantB = [(data: string) => any, (err: Error) => any]
type Args = VariantA | VariantB
 
function fn (...rest: Args): void { /* do something */ }

fn((err, data) => {
  err.stack // Correct: Typed as Error
  data.charAt(0) // Correct: Typed as string
})

fn((data) => {
  data //  --> Error: Mistyped as any, should be string  <--
}, (err) => {
  err.stack // Correct: Typed as Error
})

Expected behavior:

If two functions are passed in (VariantB), the first paramter should be typed as data: string.

Actual behavior:

If two functions are passed in, the first function's parameter is typed as any.

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 minimalen TypeScript-Reproduktion im Issue und vergleichen Sie das Contextual Typing für Aufrufe mit einem und mit zwei Callbacks. Verfolgen Sie die Typinferenz und die Overload-Behandlung für den union rest parameter und überprüfen Sie anschließend, dass der erste Callback-Parameter als string inferiert wird, ohne die Error- und data-Typings 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
42/100

Neue Issues direkt in Ihr Postfach

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