A collection of random useful utility functions that you may not find in lodash. These utility functions are emitted as ES6 modules so that they are tree-shakable.
This utility library provides a series of generic TypeScript type guards for validating your data.
This type guard validates that the provided object contains the provided property names.
function hasOwnProperties<
X extends Record<any, unknown>,
Y extends PropertyKey,
A extends Y[]
>(obj: X, props: A) => obj is X & Record<Y, unknown>;
import { isObject, hasOwnProperties } from 'andrews-utils';
const val: unknown = {
foo: 'bar',
hello: 'world',
};
if (isObject(val) && hasOwnProperties(val, ['foo', 'hello'])) {
// -> do something with obj.foo or obj.hello
}
This type guard validates that the provided object contains the provided property.
function hasOwnProperty<X extends Record<any, unknown>, Y extends PropertyKey>(
obj: X,
prop: Y
) => obj is X & Record<Y, unknown>;
import { isObject, hasOwnProperty } from 'andrews-utils';
const val: unknown = {
foo: 'bar',
hello: 'world',
};
if (isObject(val) && hasOwnProperty(val, 'foo')) {
}
This type guard validates that the provided value is an array.
function isArray(value: unknown) => value is unknown[];
import { isArray } from 'andrews-utils';
const arr: unknown = ['foo', 'bar'];
if (isArray(arr)) {
arr.forEach(val => {});
}
This type guard validates that the provided value is a number.
function isNumber(value: unknown) => value is number;
import { isNumber } from 'andrews-utils';
const val: unknown = 123;
if (isNumber(val)) {
const answer = val * 2;
}
This type guard validates that the provided value is an object.
function isObject(value: unknown) => value is Record<string, unknown>;
import { isObject } from 'andrews-utils';
const obj: unknown = {
foo: 'bar',
};
if (isObject(val)) {
// Do something with object with unknown properties.
// Usually you would combine this with the hasOwnProperties type guard.
}
This type guard validates that the provided value is not undefined or null.
function isSet<T>(value?: unknown) => value is NonNullable<T>;
import { isSet } from 'andrews-utils';
const val: unknown = 123;
if (isSet<number>(val)) {
const answer = val * 2;
}
This type guard validates that the provided value is a string.
function isString(value: unknown) => value is string;
import { isString } from 'andrews-utils';
const val: unknown = 'foo';
if (isString(val)) {
const chars = val.split('');
}
Executes a standard fetch but returns the JSON response as unknown to force you to validate it.
async function safeJsonFetch(
input: RequestInfo | URL,
init?: RequestInit | undefined
) => Promise<unknown>;
import { safeJsonFetch } from 'andrews-utils';
safeJsonFetch('https://example.com/user/1').then(json => {
const answer = json * 2;
// => TSError: Object is of type 'unknown'.ts(2571)
// This error is expected because json should be of type `unknown`.
});