microsoft / microsoft/TypeScript

Ignored check result of typeof a === typeof b

Ouverte
#28,144 2 commentaires 4 réactions 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: 3.2.0-dev.20181025

Search Terms:

Code

type argType = string | number | boolean;
function sort(a: argType, b: argType): number {
    if (typeof a !== typeof b) {
        return 0;
    }
   // typeof a should be number now
    if (typeof a !== 'number') {
        return 0;
    }
    // typeof b should be number now
    return a - b; // Here TS is not sure that b is number
}

Expected behavior:
We have already checked that typeof a is equal typeof b. So if typeof a is number, than and b is number too.

Actual behavior:
error: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.

Playground Link: http://www.typescriptlang.org/play/#src=%0D%0Atype%20argType%20%3D%20string%20%7C%20number%20%7C%20boolean%3B%0D%0Afunction%20sort(a%3A%20argType%2C%20b%3A%20argType)%3A%20number%20%7B%0D%0A%20%20%20%20if%20(typeof%20a%20!%3D%3D%20typeof%20b)%20%7B%0D%0A%20%20%20%20%20%20%20%20return%200%3B%0D%0A%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20if%20(typeof%20a%20!%3D%3D%20'number')%20%7B%0D%0A%20%20%20%20%20%20%20%20return%200%3B%0D%0A%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20return%20a%20-%20b%3B%0D%0A%7D

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

Commencez par l’exemple de code TypeScript et le lien vers le Playground, puis reproduisez l’erreur signalée avec la version indiquée TypeScript 3.2.0-dev.20181025 ou une build actuelle. Étudiez le narrowing du flux de contrôle pour typeof a !== typeof b avant l’expression arithmétique. Le travail est terminé lorsque l’exemple reconnaît correctement b comme un nombre sans affaiblir la vérification de type associée.

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
38/100

Recevez les nouvelles issues par e-mail

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