pick.ts•969 B
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import type { A, L, O } from 'ts-toolbelt'
import { reduce } from './reduce'
import { select } from './select'
type KeyMap = { [key: A.Key]: boolean }
function pickList<T extends L.List, K extends A.Key>(object: T, keys: K[]) {
const _keys = reduce(keys, (acc, key) => (acc[key] = true) && acc, {} as KeyMap)
return select(object, (item, key) => key in _keys)
}
function pickObject<T extends O.Object, K extends A.Key>(object: T, keys: K[]) {
const _keys = reduce(keys, (acc, key) => (acc[key] = true) && acc, {} as KeyMap)
return select(object, (item, key) => key in _keys)
}
/**
* Pick a subset of entries of an object or list.
*
* @param object to be picked
* @param keys to pick
* @returns
*/
const pick: typeof pickList & typeof pickObject = ((object: any, keys: any) => {
return Array.isArray(object) ? pickList(object, keys) : pickObject(object, keys)
}) as any
export { pick }