Skip to content

Commit 0a38533

Browse files
committed
Fix deep keys for recursive nested arrays
1 parent b02d106 commit 0a38533

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/types/objects.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import type { Equals } from '@noeldemartin/utils/types/helpers';
2+
3+
export type _Decrement<N extends number> = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10][N];
4+
15
export type DeepRequired<T> = T extends object
26
? {
37
[K in keyof T]-?: NonNullable<T[K]> extends Function
@@ -9,7 +13,7 @@ export type DeepRequired<T> = T extends object
913
: T;
1014

1115
/* eslint-disable max-len */
12-
export type DeepKeyOf<T, TRequired extends DeepRequired<T> = DeepRequired<T>> = NonNullable<
16+
export type DeepKeyOf<T, TDepth extends number = 5, TRequired extends DeepRequired<T> = DeepRequired<T>> = NonNullable<
1317
TRequired extends object
1418
? {
1519
[K in keyof TRequired]: TRequired[K] extends Function
@@ -18,7 +22,9 @@ export type DeepKeyOf<T, TRequired extends DeepRequired<T> = DeepRequired<T>> =
1822
?
1923
| `${Exclude<K, symbol>}`
2024
| `${Exclude<K, symbol>}.${number}`
21-
| `${Exclude<K, symbol>}.${number}.${DeepKeyOf<TItem>}`
25+
| (Equals<0, TDepth> extends true
26+
? never
27+
: `${Exclude<K, symbol>}.${number}.${DeepKeyOf<TItem, _Decrement<TDepth>, DeepRequired<TItem>>}`)
2228
: TRequired[K] extends object
2329
?
2430
| {

0 commit comments

Comments
 (0)