microsoft / microsoft/TypeScript
NonNullable isn't narrowing down object values' types for optional properties
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
TypeScript Version: 3.2.0-dev.20181106
Search Terms:
NonNullable object
NonNullable object values
Code
Run the following code via tsc --no-emit --strict test.ts:
interface P {
color?: 'red' | 'green';
}
type RequiredP = {
[K in keyof P]: NonNullable<P[K]>;
}
declare const p: RequiredP;
const color: 'red' | 'green' = p.color;
Expected behavior:
The resulting type should not allow undefined for the value at a property color.
Actual behavior:
undefined is still allowed. Using the NonNullable type doesn't seem to have any effect.
Playground Link: Note: you need to enable strictNullChecks manually!
https://www.typescriptlang.org/play/#src=interface%20P%20%7B%0D%0A%20%20color%3F%3A%20'red'%20%7C%20'green'%3B%0D%0A%7D%0D%0A%0D%0Atype%20RequiredP%20%3D%20%7B%0D%0A%20%20%5BK%20in%20keyof%20P%5D%3A%20NonNullable%3CP%5BK%5D%3E%3B%0D%0A%7D%0D%0A%0D%0Adeclare%20const%20p%3A%20RequiredP%3B%0D%0Aconst%20color%3A%20'red'%20%7C%20'green'%20%3D%20p.color%3B%0D%0A
Related Issues:
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
Riproduci l'esempio con TypeScript 3.2.0-dev.20181106 usando tsc --no-emit --strict test.ts, quindi confrontalo con il compilatore attuale e il Playground collegato. Analizza come vengono gestiti i tipi mappati, le proprietà opzionali e NonNullable; il lavoro è completo quando l'assegnazione dichiarata a color rifiuta undefined mantenendo il tipo 'red' | 'green'.
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
- Specificata chiaramente
- Idoneità per principianti
- 35/100