@@ -546,26 +546,38 @@ function resolveStringType(
546
546
ctx : TypeResolveContext ,
547
547
node : Node ,
548
548
scope : TypeScope ,
549
+ typeParameters ?: Record < string , Node > ,
549
550
) : string [ ] {
550
551
switch ( node . type ) {
551
552
case 'StringLiteral' :
552
553
return [ node . value ]
553
554
case 'TSLiteralType' :
554
- return resolveStringType ( ctx , node . literal , scope )
555
+ return resolveStringType ( ctx , node . literal , scope , typeParameters )
555
556
case 'TSUnionType' :
556
- return node . types . map ( t => resolveStringType ( ctx , t , scope ) ) . flat ( )
557
+ return node . types
558
+ . map ( t => resolveStringType ( ctx , t , scope , typeParameters ) )
559
+ . flat ( )
557
560
case 'TemplateLiteral' : {
558
561
return resolveTemplateKeys ( ctx , node , scope )
559
562
}
560
563
case 'TSTypeReference' : {
561
564
const resolved = resolveTypeReference ( ctx , node , scope )
562
565
if ( resolved ) {
563
- return resolveStringType ( ctx , resolved , scope )
566
+ return resolveStringType ( ctx , resolved , scope , typeParameters )
564
567
}
565
568
if ( node . typeName . type === 'Identifier' ) {
569
+ const name = node . typeName . name
570
+ if ( typeParameters && typeParameters [ name ] ) {
571
+ return resolveStringType (
572
+ ctx ,
573
+ typeParameters [ name ] ,
574
+ scope ,
575
+ typeParameters ,
576
+ )
577
+ }
566
578
const getParam = ( index = 0 ) =>
567
579
resolveStringType ( ctx , node . typeParameters ! . params [ index ] , scope )
568
- switch ( node . typeName . name ) {
580
+ switch ( name ) {
569
581
case 'Extract' :
570
582
return getParam ( 1 )
571
583
case 'Exclude' : {
@@ -671,6 +683,7 @@ function resolveBuiltin(
671
683
ctx ,
672
684
node . typeParameters ! . params [ 1 ] ,
673
685
scope ,
686
+ typeParameters ,
674
687
)
675
688
const res : ResolvedElements = { props : { } , calls : t . calls }
676
689
for ( const key of picked ) {
@@ -683,6 +696,7 @@ function resolveBuiltin(
683
696
ctx ,
684
697
node . typeParameters ! . params [ 1 ] ,
685
698
scope ,
699
+ typeParameters ,
686
700
)
687
701
const res : ResolvedElements = { props : { } , calls : t . calls }
688
702
for ( const key in t . props ) {
0 commit comments