microsoft / microsoft/TypeScript
Discriminating property with never as possible type makes its enclosing object type disappear when narrowing
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
🔎 Search Terms
discriminated union never, discriminating property never
🕗 Version & Regression Information
It happens in every version I tried.
⏯ Playground Link
💻 Code
type DiscUnion =
| { discProp: never, a: 1 }
| { discProp: "prop", b: 2 }
| { discProp: undefined, c: 3 }
declare const o: DiscUnion
if(o.discProp) {
o
// ^? { discProp: "prop"; b: 2; }
} else {
o
// ^? { discProp: undefined; c: 3; }
}
if(!o.discProp) {
o
// ^? { discProp: undefined; c: 3; }
} else {
o
// ^? { discProp: "prop"; b: 2; }
}
🙁 Actual behavior
{ discProp: never, a: 1 } disappears!
🙂 Expected behavior
In the first if, I expect { discProp: never, a: 1 } to be a possible type of o in the else branch. Viceversa, in the second if I expect it to be a possible type of o in the then branch.
Additional information about the issue
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione fornita in TypeScript Playground ed esegui l'esempio DiscUnion così com'è scritto. Traccia il narrowing sia per if(o.discProp) sia per if(!o.discProp); il lavoro è completato quando il membro { discProp: never, a: 1 } rimane possibile nei rami previsti senza modificare gli altri membri ristretti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100