microsoft / microsoft/TypeScript

flag to check for type-unreachable code

Aperta
#45,267 13 commenti 4 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Awaiting More Feedback Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il TypeScript Playground collegato e riproduci entrambi gli esempi utilizzando il comportamento esistente di allowUnreachableCode. Leggi le diagnostic della verifica dei tipi e del codice irraggiungibile relativi a questi casi, quindi definisci il comportamento del flag per i ritorni never e le chiamate a assertNever. Il lavoro è concluso quando i controlli del codice irraggiungibile basati sui tipi e le eccezioni proposte sono coperti da test del compilatore concordati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.