microsoft / microsoft/TypeScript
Generic type param not narrowed in true branch of conditional type
@ahejlsberg arbeitet bereits daran.
Seit 23.12.2020.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
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 ?
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.