microsoft / microsoft/TypeScript
Generic type param not narrowed in true branch of conditional type
@ahejlsberg ci sta già lavorando.
Dal 23/12/2020.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
TypeScript Version: 4.1.2
Search Terms: conditional type true branch generic narrowing
Code
type Num = 0 | 1 | 2
type Chr = 'a' | 'b' | 'c'
type Unit = Num | Chr
type NumCommand = 'add' | 'invert'
type ChrCommand = 'concat' | 'toLower'
type Command<U extends Unit> =
U extends Num ? NumCommand :
U extends Chr ? ChrCommand :
never
type NumCommandData<C extends NumCommand> =
C extends 'add' ? { otherNum: Num } :
never
type ChrCommandData<C extends ChrCommand> =
C extends 'concat' ? { otherChr: Chr } :
never
type CommandData<U extends Unit, C extends Command<U>> =
U extends Num ? NumCommandData<C> :
U extends Chr ? ChrCommandData<C> :
never
Expected behavior: in CommandData we are narrowing the generic parameter U using a conditional type, so in the true branch of the conditional C should also be "narrowed" (not sure if that's the correct term in this case) to the specific command type that depends on U.
Actual behavior: the compiler says that in the true branches of CommandData conditionals, C does not satisfy the constraint of either NumCommandData or ChrCommandData
Playground Link: playground
Related Issues: maybe #24085 ?
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.
Valutazione
Questa issue non è ancora stata valutata.