@@ -155,6 +155,12 @@ expectType<'a.b' | 'a.c' | 'a.d' | 'a.e' | 'a.f.g' | 'h'>(leaves);
155155declare const unionLeaves : Paths < { a : { b ?: number } } | { a : string ; b ?: { c : string } } , { leavesOnly : true } > ;
156156expectType < 'a.b' | 'a' | 'b.c' > ( unionLeaves ) ;
157157
158+ declare const unionLeaves1 : Paths < { a : { } | { c : number } } , { leavesOnly : true } > ;
159+ expectType < 'a' | 'a.c' > ( unionLeaves1 ) ;
160+
161+ declare const unionLeaves2 : Paths < { a : { [ x : string ] : number } | { c : number } } , { leavesOnly : true } > ;
162+ expectType < `a.${string } `> ( unionLeaves2 ) ; // Collapsed union
163+
158164declare const emptyObjectLeaves : Paths < { a : { } } , { leavesOnly : true } > ;
159165expectType < 'a' > ( emptyObjectLeaves ) ;
160166
@@ -387,3 +393,72 @@ expectType<never>(neverDepth);
387393
388394declare const anyDepth : Paths < DeepObject , { depth : any } > ;
389395expectType < 'a' | 'a.b.c' | `a.b2.${number } ` | 'a.b3' | 'a.b' | 'a.b2' | 'a.b.c.d' > ( anyDepth ) ;
396+
397+ // Index signatures
398+ declare const indexSignature : Paths < { [ x : string ] : { a : string ; b : number } } > ;
399+ expectType < string > ( indexSignature ) ; // Collapsed union
400+
401+ declare const indexSignature1 : Paths < { [ x : Lowercase < string > ] : { a : string ; b : number } } > ;
402+ expectType < Lowercase < string > | `${Lowercase < string > } .a` | `${Lowercase < string > } .b`> ( indexSignature1 ) ;
403+
404+ declare const indexSignature2 : Paths < { [ x : number ] : { 0 : string ; 1 : number } } > ;
405+ expectType < number | `${number } ` | `${number } .0` | `${number } .1`> ( indexSignature2 ) ;
406+
407+ declare const indexSignature3 : Paths < { [ x : Uppercase < string > ] : { a : string ; b : number } } > ;
408+ expectType < Uppercase < string > | `${Uppercase < string > } .a` | `${Uppercase < string > } .b`> ( indexSignature3 ) ;
409+
410+ declare const indexSignature4 : Paths < { a : { [ x : symbol ] : { b : number ; c : number } } } > ;
411+ expectType < 'a' > ( indexSignature4 ) ;
412+
413+ declare const indexSignatureWithStaticKeys : Paths < { [ x : Uppercase < string > ] : { a : string ; b : number } ; c : number } > ;
414+ expectType < 'c' | Uppercase < string > | `${Uppercase < string > } .a` | `${Uppercase < string > } .b`> ( indexSignatureWithStaticKeys ) ;
415+
416+ declare const indexSignatureWithStaticKeys1 : Paths < { [ x : Uppercase < string > ] : { a : string ; b ?: number } ; C : { a : 'a' } } > ;
417+ expectType < Uppercase < string > | `${Uppercase < string > } .a` | `${Uppercase < string > } .b`> ( indexSignatureWithStaticKeys1 ) ; // Collapsed union
418+
419+ declare const nonRootIndexSignature : Paths < { a : { [ x : string ] : { b : string ; c : number } } } > ;
420+ expectType < 'a' | `a.${string } `> ( nonRootIndexSignature ) ; // Collapsed union
421+
422+ declare const nonRootIndexSignature1 : Paths < { a : { [ x : Lowercase < string > ] : { b : string ; c : number } } } > ;
423+ expectType < 'a' | `a.${Lowercase < string > } ` | `a.${Lowercase < string > } .b` | `a.${Lowercase < string > } .c`> ( nonRootIndexSignature1 ) ;
424+
425+ declare const nestedIndexSignature : Paths < { [ x : string ] : { [ x : Lowercase < string > ] : { a : string ; b : number } } } > ;
426+ expectType < string > ( nestedIndexSignature ) ;
427+
428+ declare const nestedIndexSignature1 : Paths < { [ x : Uppercase < string > ] : { [ x : Lowercase < string > ] : { a : string ; b : number } } } > ;
429+ expectType < Uppercase < string > | `${Uppercase < string > } .${Lowercase < string > } ` | `${Uppercase < string > } .${Lowercase < string > } .a` | `${Uppercase < string > } .${Lowercase < string > } .b`> (
430+ nestedIndexSignature1 ,
431+ ) ;
432+
433+ declare const indexSignatureUnion : Paths < { a : { [ x : string ] : number } | { b : number } } > ;
434+ expectType < 'a' | `a.${string } `> ( indexSignatureUnion ) ; // Collapsed union
435+
436+ declare const indexSignatureUnion1 : Paths < { a : { [ x : Uppercase < string > ] : number } | { b : number } } > ;
437+ expectType < 'a' | 'a.b' | `a.${Uppercase < string > } `> ( indexSignatureUnion1 ) ;
438+
439+ declare const indexSignatureLeaves : Paths < { [ x : string ] : { a : string ; b : number } } , { leavesOnly : true } > ;
440+ expectType < `${string } .a` | `${string } .b`> ( indexSignatureLeaves ) ;
441+
442+ declare const indexSignatureLeaves1 : Paths < { a : { [ x : string ] : { b : string ; c : number } } ; d : string ; e : { f : number } } , { leavesOnly : true } > ;
443+ expectType < `a.${string } .b` | `a.${string } .c` | 'd' | 'e.f' > ( indexSignatureLeaves1 ) ;
444+
445+ declare const indexSignatureLeaves2 : Paths < { a : { [ x : string ] : [ ] | { b : number } } } , { leavesOnly : true } > ;
446+ expectType < `a.${string } `> ( indexSignatureLeaves2 ) ; // Collapsed union
447+
448+ declare const indexSignatureDepth : Paths < { [ x : string ] : { a : string ; b : number } } , { depth : 1 } > ;
449+ expectType < `${string } .b` | `${string } .a`> ( indexSignatureDepth ) ;
450+
451+ declare const indexSignatureDepth1 : Paths < { [ x : string ] : { a : string ; b : number } } , { depth : 0 } > ;
452+ expectType < string > ( indexSignatureDepth1 ) ;
453+
454+ declare const indexSignatureDepth2 : Paths < { [ x : string ] : { a : string ; b : number } } , { depth : 0 | 1 } > ;
455+ expectType < string > ( indexSignatureDepth2 ) ; // Collapsed union
456+
457+ declare const indexSignatureDepth3 : Paths < { a : { [ x : string ] : { b : string ; c : number } } ; d : string ; e : { f : number } } , { depth : 0 | 2 } > ;
458+ expectType < 'a' | `a.${string } .b` | `a.${string } .c` | 'd' | 'e' > ( indexSignatureDepth3 ) ;
459+
460+ declare const indexSignatureDepth4 : Paths < { a : { [ x : string ] : [ ] | { b : number } } } , { depth : 2 } > ;
461+ expectType < `a.${string } .b`> ( indexSignatureDepth4 ) ;
462+
463+ declare const indexSignatureDepthLeaves : Paths < { a : { [ x : string ] : { b : string ; c : number } } ; d : string ; e : { f : number } } , { depth : 0 | 2 ; leavesOnly : true } > ;
464+ expectType < `a.${string } .b` | `a.${string } .c` | 'd' > ( indexSignatureDepthLeaves ) ;
0 commit comments