UNPKG

@voxpelli/typed-utils

Version:

My personal (type-enabled) utils / helpers

82 lines (70 loc) 1.63 kB
import { isPropertyKey } from './is.js'; /** * @template {object} T * @template {keyof T} K * @param {T} input * @param {K[]|ReadonlyArray<K>} keys * @returns {Omit<T, K>} */ export function omit (input, keys) { const result = { ...input }; for (const key of keys) { delete result[key]; } return result; } /** * @template {object} T * @template {keyof T} K * @param {T} input * @param {K[]|ReadonlyArray<K>} keys * @returns {Pick<T, K>} */ export function pick (input, keys) { /** @type {Partial<Pick<T, K>>} */ const result = {}; for (const key of keys) { if (key in input) { result[key] = input[key]; } } return /** @type {Pick<T, K>} */ (result); } /** * @template {object} T * @typedef {T extends unknown ? keyof T : never} ObjectKeysAll */ /** * @template {object} T * @param {T} value * @returns {Array<keyof T>} */ export function typedObjectKeys (value) { return /** @type {Array<keyof T>} */ (Object.keys(value)); } /** * @template {object} T * @param {T} value * @returns {Array<ObjectKeysAll<T>>} */ export function typedObjectKeysAll (value) { return /** @type {Array<ObjectKeysAll<T>>} */ (Object.keys(value)); } /** * @template {object} T * @param {T} collection * @param {unknown} key * @returns {key is keyof T} */ export function hasOwn (collection, key) { return isPropertyKey(key) ? Object.hasOwn(collection, key) : false; } /** * @template {object} T * @param {T} collection * @param {unknown} key * @returns {key is ObjectKeysAll<T>} */ export function hasOwnAll (collection, key) { return hasOwn(collection, key); }