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 ]
>
```