ts-extras
Version:
Essential utilities for TypeScript projects
36 lines (27 loc) • 932 B
JavaScript
const { toString } = Object.prototype;
/**
Assert that the given value is an `Error`.
If the value is not an `Error`, a helpful `TypeError` will be thrown.
This can be useful as any value could potentially be thrown, but in practice, it's always an `Error`. However, because of this, TypeScript makes the caught error in a try/catch statement `unknown`, which is inconvenient to deal with.
@example
```
import {assertError} from 'ts-extras';
try {
fetchUnicorns();
} catch (error: unknown) {
assertError(error);
// `error` is now of type `Error`
if (error.message === 'Failed to fetch') {
retry();
return;
}
throw error;
}
```
@category Type guard
*/
export function assertError(value) {
if (!(value instanceof Error || toString.call(value) === '[object Error]')) {
throw new TypeError(`Expected an \`Error\`, got \`${JSON.stringify(value)}\` (${typeof value})`);
}
}