Microsoft/TypeScript
Generic type sometimes returns never instead of actual template parameter type
開放
#41,778 建立於 2020年12月2日
BugDomain: Conditional TypesExperimentation NeededHelp Wanted
倉庫指標
- 星標
- (108,860 顆星)
- PR 合併指標
- (PR 指標待抓取)
描述
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 ]
>
```