microsoft / microsoft/TypeScript
Incorrectly typed argument variant
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction minimale en TypeScript de l’issue et comparez le typage contextuel des appels avec un callback et avec deux callbacks. Suivez l’inférence des types et la gestion des overloads pour le union rest parameter, puis vérifiez que le premier paramètre du callback est inféré comme string sans régression dans les typings de Error et de data.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100