Skip to content

webshrine / stdlib/src / keysDeep

Function: keysDeep()

keysDeep<T>(object): T extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<... & ...[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<...[...], Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Record<..., ...> & Extract<..., ...>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<... & ...[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Record<D, any> & Extract<I, Collection<..., ...>>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<Record<..., ...> & Extract<..., ...>[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : never : T extends Record<D, any> ? StringifyKey<D> | Extract<T<T>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : Extract<T<T>[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Extract<..., ...>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<...[...], Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : never : never[]

Returns an array of string keys for the given object, including keys from nested objects.

Type Parameters

T extends AnyObject

Parameters

object

T

Returns

T extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<... & ...[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<...[...], Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Record<..., ...> & Extract<..., ...>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<... & ...[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Record<D, any> & Extract<I, Collection<..., ...>>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<Record<..., ...> & Extract<..., ...>[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : never : T extends Record<D, any> ? StringifyKey<D> | Extract<T<T>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<I, Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : Extract<I, Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<...[...], Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : never : Extract<T<T>[D], Collection<any, CollectionKey>> extends Record<D, any> ? StringifyKey<D> | Extract<Extract<..., ...>[D], Collection<any, CollectionKey>> extends readonly I[] ? Extract<I, Collection<..., ...>> extends readonly I[] ? Extract<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Extract<..., ...> extends Record<..., ...> ? ... | ... : never : Extract<...[...], Collection<..., ...>> extends Record<D, any> ? StringifyKey<...> | ... extends ... ? ... : ... : never : never : never[]

Example

ts
keysDeep({ a: 1, b: { c: 2, d: { e: 3 } } }) // ['a', 'b', 'c', 'd', 'e']

Defined in

packages/stdlib/src/transformers/common.ts:62