fix: limit deep keys to max depth of 10

This commit is contained in:
Tanner Linsley
2023-09-13 10:37:47 -06:00
parent 658c8f8c6c
commit 46b49ca669

View File

@@ -133,22 +133,28 @@ type AllowedIndexes<
? AllowedIndexes<Tail, Keys | Tail['length']> ? AllowedIndexes<Tail, Keys | Tail['length']>
: Keys : Keys
export type DeepKeys<T> = unknown extends T export type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 10
? never
: unknown extends T
? keyof T ? keyof T
: object extends T : object extends T
? string ? string
: T extends readonly any[] & IsTuple<T> : T extends readonly any[] & IsTuple<T>
? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>> ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>
: T extends any[] : T extends any[]
? DeepKeys<T[number]> ? DeepKeys<T[number]>
: T extends Date : T extends Date
? never ? never
: T extends object : T extends object
? (keyof T & string) | DeepKeysPrefix<T, keyof T> ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>
: never : never
type DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string) type DeepKeysPrefix<
? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}` T,
TPrefix,
TDepth extends any[],
> = TPrefix extends keyof T & (number | string)
? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`
: never : never
export type DeepValue<T, TProp> = T extends Record<string | number, any> export type DeepValue<T, TProp> = T extends Record<string | number, any>