@@ -5,6 +5,9 @@ import { DeepMerge } from './types'
55/**
66 * Map key/value pairs for an object, and constructed a new one
77 *
8+ *
9+ * @category Object
10+ *
811 * Transform:
912 * @example
1013 * ```
@@ -40,6 +43,8 @@ export function objectMap<K extends string, V, NK = K, NV = V>(
4043/**
4144 * Type guard for any key, `k`.
4245 * Marks `k` as a key of `T` if `k` is in `obj`.
46+ *
47+ * @category Object
4348 * @param obj object to query for key `k`
4449 * @param k key to check existence in `obj`
4550 */
@@ -48,21 +53,27 @@ export function isKeyOf<T extends object>(obj: T, k: keyof any): k is keyof T {
4853}
4954
5055/**
51- * Strict typed `Object.keys`
52- */
56+ * Strict typed `Object.keys`
57+ *
58+ * @category Object
59+ */
5360export function objectKeys < T extends object > ( obj : T ) {
5461 return Object . keys ( obj ) as Array < keyof T >
5562}
5663
5764/**
58- * Strict typed `Object.entries`
59- */
65+ * Strict typed `Object.entries`
66+ *
67+ * @category Object
68+ */
6069export function objectEntries < T extends object > ( obj : T ) {
6170 return Object . entries ( obj ) as Array < [ keyof T , T [ keyof T ] ] >
6271}
6372
6473/**
6574 * Deep merge :P
75+ *
76+ * @category Object
6677 */
6778export function deepMerge < T extends object = object , S extends object = T > ( target : T , ...sources : S [ ] ) : DeepMerge < T , S > {
6879 if ( ! sources . length )
@@ -96,3 +107,15 @@ export function deepMerge<T extends object = object, S extends object = T>(targe
96107function isMergableObject ( item : any ) : item is Object {
97108 return isObject ( item ) && ! Array . isArray ( item )
98109}
110+
111+ /**
112+ * Create a new subset object by giving keys
113+ *
114+ * @category Object
115+ */
116+ export function objectPick < O , T extends keyof O > ( obj : O , keys : T [ ] ) {
117+ return keys . reduce ( ( n , k ) => {
118+ n [ k ] = obj [ k ]
119+ return n
120+ } , { } as Pick < O , T > )
121+ }
0 commit comments