Microsoft/TypeScript
Generic type sometimes returns never instead of actual template parameter type
Offen
#41.778 geöffnet am 02.12.2020
BugDomain: Conditional TypesExperimentation NeededHelp Wanted
Repository-Metriken
- Stars
- (108.860 Sterne)
- PR-Merge-Metriken
- (PR-Metriken ausstehend)
Beschreibung
TypeScript Version: 3.6+
Search Terms: enum, extends, never, template parameters
Code
enum FL4 { Absurd, False, True, Unknown }
type Classify< Left, Right > = Left extends Right
? Right extends Left
? [ Left , '==', Right ]
: [ Left , '<:', Right ]
: Right extends Left
? [ Left, ':>', Right ]
: [ Left , '!=', Right ]
type Absurd_is_never_wtf = Assert<
Classify< FL4.Absurd, 0 >,
[ never, '<:', 0 ]
>
type One_is_never_wtf = Assert<
Classify< FL4.Absurd, 1 >,
[ FL4.Absurd, ':>', never ]
>
type Absurd_is_Absurd = Assert<
Classify< FL4.Absurd, 0 >,
[ FL4.Absurd, '==', 0 ]
>
type One_is_One = Assert<
Classify< FL4.Absurd, 1 >,
[ FL4.Absurd, ':>', 1 ]
>
```