Skip to content

Commit 8e046f1

Browse files
committed
feat: objectPick
1 parent 58130ee commit 8e046f1

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/object.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
*/
5360
export 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+
*/
6069
export 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
*/
6778
export 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
96107
function 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

Comments
 (0)