microsoft / microsoft/TypeScript
Incorrectly typed argument variant
Dieses Issue hat noch niemand übernommen.
- 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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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