Microsoft/TypeScript
View on GitHubGeneric type sometimes returns never instead of actual template parameter type
Open
#41,778 opened on Dec 2, 2020
BugDomain: Conditional TypesExperimentation NeededHelp Wanted
Description
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 ]
>
```