get-or-throw
Version:
A convenience function for safely getting values from dynamic objects and arrays
71 lines (51 loc) • 1.98 kB
Markdown
# Get-Or-Throw / Got
A convenience function for safely accessing values in dynamic objects and
arrays. It gets the value at a specified key or index, and throws an error if
the resulting value is `undefined`. Optionally, you can set a custom error
message.
This was created to make it easy to adhere to Typescript's
[noUncheckedIndexedAccess](https://www.typescriptlang.org/tsconfig/#noUncheckedIndexedAccess)
setting, which is recommended for strict type checking.
## Features
- Typescript assertions for type narrowing.
- Works with both objects and arrays.
- Supports negative indexing for arrays.
- Allows for custom error messages.
- Zero dependencies.
- Provides `got` as alias for `getOrThrow`
## Installation
```bash
pnpm add get-or-throw
```
...or use the equivalent for your package manager.
## Usage
The example code below uses the `got` alias but `getOrThrow` is also available
if you want to be more explicit.
```ts
const arr = [1, 2, 3];
const value = got(arr, 1); // Output: 2
/** Support for negative indexing */
const arr = [1, 2, 3];
const value = got(arr, -1); // Output: 3
/** This will throw an error: "Index 3 is out of bounds." */
const value = got(arr, 3);
const obj = { a: 1, b: 2, c: 3 };
const value = got(obj, "b"); // Output: 2
/** This will throw an error: "Key "d" does not exist in the object." */
const value = got(obj, "d");
/** This will throw an error: "Failed to find d" */
const key = "d";
const value = got(obj, key, `Failed to find ${key}`);
/** Null is a valid value */
const arr = [1, null, 3];
const value = got(arr, 1); // Output: null
/** This will throw an error: "Value at index 1 is undefined." */
const arr = [1, undefined, 3];
const value = got(arr, 1);
/** Null is a valid value */
const obj = { a: 1, b: null, c: 3 };
const value = got(obj, "b"); // Output: null
/** This will throw an error: "Value at key 'b' is undefined." */
const obj = { a: 1, b: undefined, c: 3 };
const value = got(obj, "b");
```