microsoft / microsoft/TypeScript

Comparison of union types should error

Ouverte
#41,163 10 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

In Discussion Suggestion
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

  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

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

Recevez les nouvelles issues par e-mail

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