@@ -36,6 +36,7 @@ import type {
36
36
TypeScript ,
37
37
TSQualifiedName ,
38
38
TSLiteralType ,
39
+ TSTypeAliasDeclaration ,
39
40
} from '@babel/types' ;
40
41
import { getDocblock } from './docblock.js' ;
41
42
@@ -54,6 +55,8 @@ const tsTypes: Record<string, string> = {
54
55
TSVoidKeyword : 'void' ,
55
56
} ;
56
57
58
+ const UNKNOWN_TYPE = Object . freeze ( { name : 'unknown' } ) as SimpleType ;
59
+
57
60
const namedTypes : Record <
58
61
string ,
59
62
(
@@ -71,6 +74,7 @@ const namedTypes: Record<
71
74
TSIntersectionType : handleTSIntersectionType ,
72
75
TSMappedType : handleTSMappedType ,
73
76
TSTupleType : handleTSTupleType ,
77
+ TSTypeAliasDeclaration : handleTSTypeAliasDeclaration ,
74
78
TSTypeQuery : handleTSTypeQuery ,
75
79
TSTypeOperator : handleTSTypeOperator ,
76
80
TSIndexedAccessType : handleTSIndexedAccessType ,
@@ -113,6 +117,15 @@ function handleTSArrayType(
113
117
} ;
114
118
}
115
119
120
+ function handleTSTypeAliasDeclaration (
121
+ path : NodePath < TSTypeAliasDeclaration > ,
122
+ typeParams : TypeParameters | null ,
123
+ ) : TypeDescriptor < TSFunctionSignatureType > {
124
+ const resolvedTypeAnnotation = path . get ( 'typeAnnotation' ) ;
125
+
126
+ return getTSTypeWithResolvedTypes ( resolvedTypeAnnotation , typeParams ) ;
127
+ }
128
+
116
129
function handleTSTypeReference (
117
130
path : NodePath < TSTypeReference > ,
118
131
typeParams : TypeParameters | null ,
@@ -127,8 +140,7 @@ function handleTSTypeReference(
127
140
}
128
141
129
142
const resolvedPath =
130
- ( typeParams && typeParams [ type . name ] ) ||
131
- resolveToValue ( path . get ( 'typeName' ) ) ;
143
+ ( typeParams && typeParams [ type . name ] ) || resolveToValue ( typeName ) ;
132
144
133
145
const typeParameters = path . get ( 'typeParameters' ) ;
134
146
const resolvedTypeParameters = resolvedPath . get ( 'typeParameters' ) as NodePath <
@@ -149,15 +161,18 @@ function handleTSTypeReference(
149
161
resolvedPath as NodePath < TSType | TSTypeAnnotation > ,
150
162
null ,
151
163
) ;
152
- }
164
+ } else if ( resolvedPath !== typeName ) {
165
+ const resolvedType = getTSTypeWithResolvedTypes (
166
+ resolvedPath as NodePath < TSType | TSTypeAnnotation > ,
167
+ typeParams ,
168
+ ) ;
153
169
154
- const resolvedTypeAnnotation = resolvedPath . get ( 'typeAnnotation' ) as NodePath <
155
- TSType | TSTypeAnnotation | null | undefined
156
- > ;
170
+ if ( resolvedType !== UNKNOWN_TYPE ) {
171
+ return resolvedType ;
172
+ }
173
+ }
157
174
158
- if ( resolvedTypeAnnotation . hasNode ( ) ) {
159
- type = getTSTypeWithResolvedTypes ( resolvedTypeAnnotation , typeParams ) ;
160
- } else if ( typeParameters . hasNode ( ) ) {
175
+ if ( typeParameters . hasNode ( ) ) {
161
176
const params = typeParameters . get ( 'params' ) ;
162
177
163
178
type = {
@@ -479,7 +494,7 @@ function handleTSIndexedAccessType(
479
494
} ) ;
480
495
481
496
if ( ! resolvedType ) {
482
- return { name : 'unknown' } ;
497
+ return UNKNOWN_TYPE ;
483
498
}
484
499
485
500
return {
@@ -533,7 +548,7 @@ function getTSTypeWithResolvedTypes(
533
548
}
534
549
535
550
if ( ! type ) {
536
- type = { name : 'unknown' } ;
551
+ type = UNKNOWN_TYPE ;
537
552
}
538
553
539
554
if ( typeAliasName ) {
0 commit comments