@voxpelli/typed-utils
Version:
My personal (type-enabled) utils / helpers
101 lines (57 loc) • 4.37 kB
Markdown
# @voxpelli/typed-utils
My personal (type-enabled) utils / helpers
[](https://www.npmjs.com/package/@voxpelli/typed-utils)
[](https://www.npmjs.com/package/@voxpelli/typed-utils)
[](https://github.com/neostandard/neostandard)
[](https://github.com/voxpelli/badges-cjs-esm)
[](https://github.com/voxpelli/types-in-js)
[](https://mastodon.social/@voxpelli)
## Usage
### Simple
```javascript
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 the`valueToRemove` 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.
### 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>`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) with code that does the actual omit.
#### `pick(obj, keys)`
The TypeScript utility type [`Pick<obj, keys>`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) with code that does the actual pick.
#### `typedObjectKeys(obj)`
Like [`Object.keys()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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)`](#typedobjectkeysobj) 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)`
#### `getStringValueByPath(obj, path)`
#### `getValueByPath(obj, path)`
<!-- ## Used by
* [`example`](https://example.com/) – used by this one to do X and Y
-->
## Similar modules
* [`type-helpers`](https://github.com/voxpelli/type-helpers) – my personal type helpers, contains no code, just types
<!--
## See also
* [Announcement blog post](#)
* [Announcement tweet](#) -->