webshrine / stdlib/src / keysDeep
Function: keysDeep()
keysDeep<
T
>(object
):T
extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<I
,Collection
<..., ...>> extendsRecord
<D
,any
> ?StringifyKey
<...> | ... extends ... ? ... : ... :never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<...[...],Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<... & ...[D
],Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<...[...],Collection
<..., ...>> extendsRecord
<D
,any
> ?StringifyKey
<...> | ... extends ... ? ... : ... :never
:never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<Record
<..., ...> &Extract
<..., ...>[D
],Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<I
,Collection
<..., ...>> extendsRecord
<D
,any
> ?StringifyKey
<...> | ... extends ... ? ... : ... :never
:Extract
<... & ...[D
],Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :never
:never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<Record
<D
,any
> &Extract
<I
,Collection
<..., ...>>[D
],Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<I
,Collection
<..., ...>> extendsRecord
<D
,any
> ?StringifyKey
<...> | ... extends ... ? ... : ... :never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :never
:Extract
<Record
<..., ...> &Extract
<..., ...>[D
],Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<...[...],Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:never
:never
:T
extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<T
<T
>[D
],Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<I
,Collection
<..., ...>> extendsRecord
<D
,any
> ?StringifyKey
<...> | ... extends ... ? ... : ... :never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :never
:Extract
<I
,Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<...[...],Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:never
:Extract
<T
<T
>[D
],Collection
<any
,CollectionKey
>> extendsRecord
<D
,any
> ?StringifyKey
<D
> |Extract
<Extract
<..., ...>[D
],Collection
<any
,CollectionKey
>> extends readonlyI
[] ?Extract
<I
,Collection
<..., ...>> extends readonlyI
[] ?Extract
<..., ...> extends readonly ...[] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... :Extract
<..., ...> extendsRecord
<..., ...> ? ... | ... :never
:Extract
<...[...],Collection
<..., ...>> extendsRecord
<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
keysDeep({ a: 1, b: { c: 2, d: { e: 3 } } }) // ['a', 'b', 'c', 'd', 'e']