microsoft / microsoft/TypeScript

Incorrectly typed argument variant

Ouverte
#37,580 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Domain: check: Type Inference
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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.