microsoft / microsoft/TypeScript
Comparison of union types should error
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: v4.0.2
Search Terms: union type comparison
Code
function compare(a: number | string, b: number | string): boolean {
return a < b; // <- Fails to error
}
compare(1, "a");
1 < "a"; // Correctly errors: Operator '<' cannot be applied to types 'number' and 'string'.
This is a simplified example taken from an error found in code review. The function's type signature should really be: function compare<T extends number | string>(a: T, b: T): boolean and I would have expected TypeScript to error for the uncorrected type signature.
Expected behavior:
Typescript should catch the error comparing union types within the function as Flow (v0.136.0) does: flow.org/try example.
Actual behavior:
Typescript does not catch the error for a < b.
Playground Link: example in typescriptlang.org/play.
Related Issues:
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
Reproduisez la comparaison signalée dans le TypeScript Playground et comparez-la à la comparaison directe de number/string présentée dans l’issue. Suivez la manière dont le vérificateur de types traite les opérateurs relationnels pour les opérandes d’union, puis ajoutez un test de régression vérifiant le diagnostic attendu et vérifiez que les comparaisons valides entre valeurs du même type fonctionnent toujours.
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
- 45/100