Package detail

@voxpelli/typed-utils

voxpelli35.6kMIT2.2.2

My personal (type-enabled) utils / helpers

readme

@voxpelli/typed-utils

My personal (type-enabled) utils / helpers

npm version npm downloads neostandard javascript style Module type: ESM Types in JS Follow @voxpelli@mastodon.social

Usage

Simple

import { filter } from '@voxpelli/typed-utils';

/** @type {string[]} */
const noUndefined = filter(['foo', undefined]);

Helpers

Array

filter(inputArray, [valueToRemove]) => filteredArray

Takes an array as inputArray and a valueToRemove that is a string literal, false, null or undefined, defaulting to undefined if left out.

Creates a new array with all values from inputArray except the one that matches valueToRemove, then returns that array with a type where thevalueToRemove type has also been removed from the possible values.

Can be useful in combination with eg. a .map() where some items in the array has resulted in undefined / null / false values that one wants to have removed before processing the result further.

filterWithCallback(value, callback)

Similar to Array.prototype.filter() but expects the callback to be a function like (value: unknown) => value is any where the is is the magic sauce.

isArrayOfType(value, callback)

Similar to Array.isArray() but also checks that the array only contains values of type verified by the callback function and sets the type to be an array of that type rather than simply any[]. The callback should be a function like (value: unknown) => value is any and needs to have an is in the return type for the types to work.

isStringArray(value)

Similar to Array.isArray() but also checks that the array only contains values of type string and sets the type to string[] rather than any[].

typesafeIsArray(value)

Alias: isUnknownArray(value) (deprecated)

Does the exact same thing as Array.isArray() but derives the type unknown[] rather than any[], which improves strictness.

Assertions

TypeHelpersAssertionError

Custom error class thrown by all assertion helpers in this module. You can catch this error type to specifically handle assertion failures from these utilities.

assert(condition, message)

Throws a TypeHelpersAssertionError if condition is falsy. Used internally by other assertion helpers, but can also be used directly for custom runtime assertions.

assertObjectWithKey(obj, key)

Asserts that obj is an object and contains the property key. Throws an error if not.

assertType(value, type, [message])

Asserts that value is of the given type (string literal, eg. 'string', 'number', 'array', 'null' – same as returned by explainVariable()). Throws an error if not. Optional custom error message.

assertKeyWithType(obj, key, type)

Asserts that obj is an object, contains the property key, and that obj[key] is of the given type.

assertOptionalKeyWithType(obj, key, type)

Asserts that obj is an object and either does not contain the property key, or if present, that obj[key] is undefined or of the given type.

is-calls / Type Checks

isObjectWithKey(obj, key)

Returns true if obj is an object and contains the property key.

isType(value, type)

Returns true if value is of the given type (string literal, eg. 'string', 'number', 'array', 'null' – same as returned by explainVariable()).

isKeyWithType(obj, key, type)

Returns true if obj is an object, contains the property key, and obj[key] is of the given type.

isOptionalKeyWithType(obj, key, type)

Returns true if obj is an object and either does not contain the property key, or if present, obj[key] is of the given type or undefined.

Miscellaneous

explainVariable(value)

Returns a typeof style explanation of a variable, with added support for eg. null and array

looksLikeAnErrnoException(err)

Returns true if the err looks like being of the NodeJS.ErrnoException type

Object

omit(obj, keys)

The TypeScript utility type Omit<obj, keys> with code that does the actual omit.

pick(obj, keys)

The TypeScript utility type Pick<obj, keys> with code that does the actual pick.

typedObjectKeys(obj)

Like Object.keys() but typed with Array<keyof obj> rather than string[]. When obj is a union this means the type will resolve to only the keys shared between all objects in the union.

typedObjectKeysAll(obj)

Like typedObjectKeys(obj) but when obj is a union this type will resolve to all possible keys within that union, not just the shared ones.

Object Path

getObjectValueByPath(obj, path, createIfMissing)

Returns the object at the given path within obj, where path can be a string (dot-separated) or an array of strings. If createIfMissing is true, missing objects along the path are created. Returns false if a non-object is encountered, or undefined if the path does not exist.

getStringValueByPath(obj, path)

Returns the string value at the given path within obj, or false if the value is not a string, or undefined if the path does not exist. The path can be a string (dot-separated) or an array of strings.

getValueByPath(obj, path)

Returns an object { value } where value is the value at the given path within obj, or false if a non-object is encountered, or undefined if the path does not exist. The path can be a string (dot-separated) or an array of strings.

Similar modules

changelog

Changelog

2.2.2 (2025-06-10)

🩹 Fixes

  • remove one remaining nodejs reliance (c4fc3af)

2.2.1 (2025-06-09)

🩹 Fixes

  • remove reliance on node:assert (bb570f1)

2.2.0 (2025-06-09)

🌟 Features

2.1.0 (2025-06-09)

🌟 Features

🧹 Chores

  • deps: update dependency @types/node to ^18.19.111 (#37) (131e057)
  • deps: update dependency knip to ^5.60.2 (#38) (b824749)
  • deps: update dependency mocha to ^11.6.0 (#39) (baeb9de)

2.0.1 (2025-06-01)

📚 Documentation

  • improve the readme with new methods (c802169)

🧹 Chores

  • deps: update dependency validate-conventional-commit to ^1.0.4 (#25) (bc6382d)

2.0.0 (2025-06-01)

⚠ BREAKING CHANGES

  • require node.js ^20.11.0 || >=22.0.0

🌟 Features

🧹 Chores

  • deps: update dependency @voxpelli/eslint-config to v22 (#30) (dfddedd)
  • deps: update dev dependencies (e32fe27)
  • deps: update dev dependencies (8770ff8)
  • deps: update linting dependencies (#18) (1cb3b14)
  • deps: update test dependencies (#21) (1af37ba)
  • deps: update type dependencies (#19) (925074e)
  • require node.js ^20.11.0 || >=22.0.0 (4b9e306)
  • use modern eslint script command (c750235)

1.10.2 (2024-06-29)

🧹 Chores

  • deps: update dev dependencies (51a15d1)
  • deps: update to neostandard based linting (734a2ae)

1.10.1 (2024-04-22)

Bug Fixes

  • only pick keys that are set (103bc69)

1.10.0 (2024-04-19)

Features

  • array object paths in getValueByPath etc (a2fb594)

1.9.0 (2024-04-19)

Features

  • add getValueByPath() and friends (6c2e298)
  • add isErrorWithCode (0de6a4f)

1.8.0 (2024-04-15)

Features

  • add looksLikeAnErrnoException() (3168df5)

Bug Fixes

  • ensure @deprecated is kept in exported type (ab05a1d)

1.7.0 (2024-04-03)

Features

  • filterWithCallback() (87591ab)
  • rename isUnknownArray to typesafeIsArray (b594494)

1.6.0 (2024-03-11)

Features

  • typedObjectKeys() / typedObjectKeysAll() (b374c92)

1.5.0 (2024-03-11)

Features

1.4.1 (2024-03-10)

Bug Fixes

  • actually export pick/omit (e210d1b)

1.4.0 (2024-03-10)

Features

  • release omit() and pick() (5690ae3)