@@ -546,26 +546,43 @@ 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
- resolveStringType ( ctx , node . typeParameters ! . params [ index ] , scope )
568
- switch ( node . typeName . name ) {
579
+ resolveStringType (
580
+ ctx ,
581
+ node . typeParameters ! . params [ index ] ,
582
+ scope ,
583
+ typeParameters ,
584
+ )
585
+ switch ( name ) {
569
586
case 'Extract' :
570
587
return getParam ( 1 )
571
588
case 'Exclude' : {
@@ -671,6 +688,7 @@ function resolveBuiltin(
671
688
ctx ,
672
689
node . typeParameters ! . params [ 1 ] ,
673
690
scope ,
691
+ typeParameters ,
674
692
)
675
693
const res : ResolvedElements = { props : { } , calls : t . calls }
676
694
for ( const key of picked ) {
@@ -683,6 +701,7 @@ function resolveBuiltin(
683
701
ctx ,
684
702
node . typeParameters ! . params [ 1 ] ,
685
703
scope ,
704
+ typeParameters ,
686
705
)
687
706
const res : ResolvedElements = { props : { } , calls : t . calls }
688
707
for ( const key in t . props ) {
0 commit comments