@@ -89,7 +89,10 @@ export function resolveType(
8989 return new ReferenceNode ( 'RefCallback' , [ ] ) ;
9090 }
9191
92- return new ReferenceNode ( getTypeName ( type , typeSymbol , checker ) , namespaces ) ;
92+ return new ReferenceNode (
93+ getTypeName ( type , typeSymbol , checker ) ?? checker . typeToString ( type ) ,
94+ namespaces ,
95+ ) ;
9396 }
9497
9598 if ( hasFlag ( type . flags , ts . TypeFlags . Boolean ) ) {
@@ -116,11 +119,7 @@ export function resolveType(
116119
117120 if ( type . isUnion ( ) ) {
118121 const memberTypes : TypeNode [ ] = [ ] ;
119- const symbol = typeSymbol ?? type . aliasSymbol ?? type . getSymbol ( ) ;
120- let typeName = symbol ?. getName ( ) ;
121- if ( typeName === '__type' ) {
122- typeName = undefined ;
123- }
122+ const typeName = getTypeName ( type , typeSymbol , checker , false ) ;
124123
125124 // @ts -expect-error - Internal API
126125 if ( type . origin ?. isUnion ( ) ) {
@@ -141,11 +140,7 @@ export function resolveType(
141140
142141 if ( type . isIntersection ( ) ) {
143142 const memberTypes : TypeNode [ ] = [ ] ;
144- const symbol = typeSymbol ?? type . aliasSymbol ?? type . getSymbol ( ) ;
145- let typeName = symbol ?. getName ( ) ;
146- if ( typeName === '__type' ) {
147- typeName = undefined ;
148- }
143+ const typeName = getTypeName ( type , typeSymbol , checker , false ) ;
149144
150145 for ( const memberType of type . types ) {
151146 memberTypes . push ( resolveType ( memberType , context ) ) ;
@@ -246,12 +241,7 @@ export function resolveType(
246241 type . flags & ts . TypeFlags . Object ||
247242 ( type . flags & ts . TypeFlags . NonPrimitive && checker . typeToString ( type ) === 'object' )
248243 ) {
249- const typeSymbol = type . aliasSymbol ?? type . getSymbol ( ) ;
250- let typeName = typeSymbol ?. getName ( ) ;
251- if ( typeName === '__type' ) {
252- typeName = undefined ;
253- }
254-
244+ const typeName = getTypeName ( type , typeSymbol , checker , false ) ;
255245 return new ObjectNode ( typeName , namespaces , [ ] , undefined ) ;
256246 }
257247
@@ -358,30 +348,39 @@ function isTypeExternal(type: ts.Type, checker: ts.TypeChecker): boolean {
358348 ) ;
359349}
360350
361- function getTypeName (
351+ export function getTypeName (
362352 type : ts . Type ,
363353 typeSymbol : ts . Symbol | undefined ,
364354 checker : ts . TypeChecker ,
365- ) : string {
355+ useFallback : boolean = true ,
356+ ) : string | undefined {
366357 const symbol = typeSymbol ?? type . aliasSymbol ?? type . getSymbol ( ) ;
367358 if ( ! symbol ) {
368- return checker . typeToString ( type ) ;
359+ return useFallback ? checker . typeToString ( type ) : undefined ;
369360 }
370361
371362 const typeName = symbol . getName ( ) ;
372363 if ( typeName === '__type' ) {
373- return checker . typeToString ( type ) ;
364+ return useFallback ? checker . typeToString ( type ) : undefined ;
374365 }
375366
376367 let typeArguments : string [ ] | undefined ;
377- if ( 'target' in type ) {
378- typeArguments = checker
379- . getTypeArguments ( type as ts . TypeReference )
380- ?. map ( ( x ) => getTypeName ( x , undefined , checker ) ) ;
381- }
382368
383- if ( ! typeArguments ?. length ) {
384- typeArguments = type . aliasTypeArguments ?. map ( ( x ) => getTypeName ( x , undefined , checker ) ) ?? [ ] ;
369+ if ( type . aliasSymbol && ! type . aliasTypeArguments ) {
370+ typeArguments = [ ] ;
371+ } else {
372+ if ( 'target' in type ) {
373+ typeArguments = checker
374+ . getTypeArguments ( type as ts . TypeReference )
375+ ?. map ( ( x ) => getTypeName ( x , undefined , checker , true ) ?? 'unknown' ) ;
376+ }
377+
378+ if ( ! typeArguments ?. length ) {
379+ typeArguments =
380+ type . aliasTypeArguments ?. map (
381+ ( x ) => getTypeName ( x , undefined , checker , true ) ?? 'unknown' ,
382+ ) ?? [ ] ;
383+ }
385384 }
386385
387386 if ( typeArguments && typeArguments . length > 0 ) {
0 commit comments