microsoft / microsoft/TypeScript
Parameter type narrowing should consider function overload signatures
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: 2.2.1
Code
interface A { x: number; }
interface B { y: number; }
function foo(b: B): void;
function foo(a: A, b: B): void;
function foo(a: A|B, b?: B): void {
if(b !== void 0) {
console.log(a.y); // Error: Property 'y' does not exist on type 'A | B'
}
}
The third (unified) function signature is hidden from the call site, and therefore any arguments should be able to be narrowed based on inspection of the provided arguments. In the case above, the second argument is only defined if the first argument is of type A, and so I would expect narrowing of the argument type to occur accordingly. One could make the argument that in the compiled output, it's possible for JavaScript to still pass subsequent arguments, but then why narrow types at all, seeing as JavaScript can always violate every type constraint that TypeScript makes inferences from?
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 TypeScript 2.2.1 dans l’issue et examinez comment les signatures de surcharge sont liées à la signature d’implémentation unifiée lors du rétrécissement des paramètres. Vérifiez le diagnostic actuel pour a.y, puis déterminez si le comportement souhaité est cohérent avec les surcharges indiquées. La tâche est terminée lorsque l’exemple rétrécit l’argument comme prévu sans affaiblir les vérifications de types non liées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100