microsoft / microsoft/TypeScript

flag to check for type-unreachable code

Ouverte
#45,267 13 commentaires 4 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Awaiting More Feedback Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

feature request

the allowUnreachableCode flag (when disabled) only checks for code that's syntactically unreachable. however, the check doesn't work at all when looking at types.

i propose an additional flag (as @RyanCavanaugh suggested keeping these two concerns separate, see https://github.com/microsoft/TypeScript/issues/45267#issuecomment-901297945) that checks for code that the type checker believes is unreachable. for example:

declare function foo(): never

const a = foo()
console.log(1) //no error

foo()

console.log(1) //error

assertNever

in order to allow the assertNever pattern, the flag could still allow unreachable code where an argument of type never is passed, but not code after never is returned. this way, the following code would still be valid:

declare function assertNever(value: never): never
declare const foo: 1|2|3
switch(foo) {
    case 1:
        break
    case 2:
        break
    case 3:
        break
    default:
        assertNever(foo)
}
🔎 Search Terms

unreachable code

⏯ Playground Link

Playground link with relevant code

💻 Code
if (false) console.log("asdf") //error
if (false as false) console.log("asdf") //no error

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 le TypeScript Playground lié et reproduisez les deux exemples en utilisant le comportement existant de allowUnreachableCode. Examinez les diagnostics de vérification des types et de code inaccessible autour de ces cas, puis définissez le comportement de l'option pour les retours never et les appels à assertNever. Le travail est terminé lorsque les vérifications de code inaccessible fondées sur les types et les exceptions proposées sont couvertes par des tests du compilateur approuvés.

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

Recevez les nouvelles issues par e-mail

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