File tree Expand file tree Collapse file tree 3 files changed +128
-9
lines changed Expand file tree Collapse file tree 3 files changed +128
-9
lines changed Original file line number Diff line number Diff line change @@ -238,16 +238,20 @@ export function resolveType(
238238 }
239239
240240 if ( type . flags & ts . TypeFlags . Conditional ) {
241- // We don't fully support conditional types. We assume the condition is always true.
242- if (
243- type . aliasSymbol ?. declarations ?. [ 0 ] &&
244- ts . isTypeAliasDeclaration ( type . aliasSymbol . declarations [ 0 ] ) &&
245- ts . isConditionalTypeNode ( type . aliasSymbol . declarations [ 0 ] . type )
246- ) {
247- const trueType = checker . getTypeFromTypeNode (
248- type . aliasSymbol . declarations [ 0 ] . type . trueType ,
241+ const conditionalType = type as ts . ConditionalType ;
242+ if ( conditionalType . resolvedTrueType && conditionalType . resolvedFalseType ) {
243+ return new UnionNode (
244+ undefined ,
245+ [ ] ,
246+ [
247+ resolveType ( ( type as ts . ConditionalType ) . resolvedTrueType ! , '' , context ) ,
248+ resolveType ( ( type as ts . ConditionalType ) . resolvedFalseType ! , '' , context ) ,
249+ ] ,
249250 ) ;
250- return resolveType ( trueType , name , context ) ;
251+ } else if ( conditionalType . resolvedTrueType ) {
252+ return resolveType ( conditionalType . resolvedTrueType , '' , context ) ;
253+ } else if ( conditionalType . resolvedFalseType ) {
254+ return resolveType ( conditionalType . resolvedFalseType , '' , context ) ;
251255 }
252256 }
253257
Original file line number Diff line number Diff line change 1+ export function fn < T extends boolean > ( x : T ) : T extends true ? number : null {
2+ return ( x ? 1 : null ) as T extends true ? number : null ;
3+ }
4+
5+ export function Component1 < Multiple extends boolean > ( props : Props < Multiple > ) {
6+ return null ;
7+ }
8+
9+ interface Props < Multiple extends boolean > {
10+ value : Multiple extends true ? string | null : string [ ] ;
11+ }
Original file line number Diff line number Diff line change 1+ {
2+ "name" : " test/conditional-types/input" ,
3+ "exports" : [
4+ {
5+ "name" : " fn" ,
6+ "type" : {
7+ "kind" : " function" ,
8+ "name" : " fn" ,
9+ "parentNamespaces" : [],
10+ "callSignatures" : [
11+ {
12+ "parameters" : [
13+ {
14+ "type" : {
15+ "kind" : " typeParameter" ,
16+ "name" : " T" ,
17+ "parentNamespaces" : [],
18+ "constraint" : " boolean"
19+ },
20+ "name" : " x" ,
21+ "optional" : false
22+ }
23+ ],
24+ "returnValueType" : {
25+ "kind" : " union" ,
26+ "types" : [
27+ {
28+ "kind" : " intrinsic" ,
29+ "parentNamespaces" : [],
30+ "name" : " number"
31+ },
32+ {
33+ "kind" : " intrinsic" ,
34+ "parentNamespaces" : [],
35+ "name" : " null"
36+ }
37+ ],
38+ "parentNamespaces" : []
39+ }
40+ }
41+ ]
42+ }
43+ },
44+ {
45+ "name" : " Component1" ,
46+ "type" : {
47+ "kind" : " function" ,
48+ "name" : " Component1" ,
49+ "parentNamespaces" : [],
50+ "callSignatures" : [
51+ {
52+ "parameters" : [
53+ {
54+ "type" : {
55+ "kind" : " object" ,
56+ "name" : " Props" ,
57+ "parentNamespaces" : [],
58+ "properties" : [
59+ {
60+ "name" : " value" ,
61+ "type" : {
62+ "kind" : " union" ,
63+ "types" : [
64+ {
65+ "kind" : " intrinsic" ,
66+ "parentNamespaces" : [],
67+ "name" : " string"
68+ },
69+ {
70+ "kind" : " array" ,
71+ "parentNamespaces" : [],
72+ "elementType" : {
73+ "kind" : " intrinsic" ,
74+ "parentNamespaces" : [],
75+ "name" : " string"
76+ }
77+ },
78+ {
79+ "kind" : " intrinsic" ,
80+ "parentNamespaces" : [],
81+ "name" : " null"
82+ }
83+ ],
84+ "parentNamespaces" : []
85+ },
86+ "optional" : false
87+ }
88+ ]
89+ },
90+ "name" : " props" ,
91+ "optional" : false
92+ }
93+ ],
94+ "returnValueType" : {
95+ "kind" : " intrinsic" ,
96+ "parentNamespaces" : [],
97+ "name" : " null"
98+ }
99+ }
100+ ]
101+ }
102+ }
103+ ]
104+ }
You can’t perform that action at this time.
0 commit comments