@@ -21,8 +21,8 @@ export function mergePath(path: (string | number | symbol)[]) {
2121/**
2222 * Lists all paths in an object as string accessors.
2323 */
24- export type FormPath < T extends object > =
25- | ( string & StringPath < T > )
24+ export type FormPath < T extends object , OnlyArrays extends boolean = false > =
25+ | ( string & StringPath < T , OnlyArrays > )
2626 | FormPathLeaves < T > ;
2727
2828/**
@@ -31,7 +31,10 @@ export type FormPath<T extends object> =
3131 */
3232export type FormPathLeaves < T extends object > = string & StringPathLeaves < T > ;
3333
34- export type StringPath < T extends object > = NonNullable < T > extends ( infer U ) [ ]
34+ export type StringPath <
35+ T extends object ,
36+ OnlyArrays extends boolean = false
37+ > = NonNullable < T > extends ( infer U ) [ ]
3538 ? NonNullable < U > extends object
3639 ?
3740 | `[${number } ]`
@@ -40,10 +43,20 @@ export type StringPath<T extends object> = NonNullable<T> extends (infer U)[]
4043 : '.' } ${NonNullable < U > extends Date | Set < unknown >
4144 ? never
4245 : StringPath < NonNullable < U > > & string } `
43- : `[${number } ]` | `[${number } ].${U & string } `
46+ : `[${number } ]` /* | `[${number}].${U & string}`*/
4447 : NonNullable < T > extends object
4548 ?
46- | keyof T
49+ | ( OnlyArrays extends false
50+ ? keyof T
51+ : {
52+ [ K in keyof T ] -?: K extends string
53+ ? NonNullable < T [ K ] > extends ( infer U2 ) [ ]
54+ ? U2 extends object
55+ ? never
56+ : K
57+ : never
58+ : never ;
59+ } [ keyof T ] )
4760 | {
4861 [ K in keyof T ] -?: K extends string
4962 ? NonNullable < T [ K ] > extends object
0 commit comments