Skip to content

Type guards

Type guards allow you to narrow the type of a value:

function doThing(x: number | string) {
if (typeof x === 'string') {
// `x` is string
return x.substring(1);
}
// `x` is number
return x * x;
}

Primitve

Guards for primitive types.

isBoolean

Checks whether a value is boolean.

function isBoolean(value: unknown): value is boolean;

isNull

Checks whether a value is null.

function isNull(value: unknown): value is null;

isNumber

Checks whether a value is a number.

Warning

Does not consider NaN a valid value

function isNumber(value: unknown): value is number;

isString

Checks whether a value is a string.

function isString(value: unknown): value is string;

isUndefined

Checks whether a value is undefined.

function isUndefined(value: unknown): value is undefined;

Nullish

Guards for nullish types.

isNullish

Checks whether a value is null or undefined.

function isNullish(value: unknown): value is Nullish;

isDefined

Checks whether a value is not null or undefined.

function isDefined<T>(value: T | Nullish): value is NonNullable<T>;

Array

Guards for array types.

isNonEmptyArray

Checks whether an array is not empty.

function isNonEmptyArray<T>(value: T[]): value is [T, ...T[]];

Promise

Guards for Promise related types.

isFulfilled

Checks whether a result from Promise.allSettled is fulfilled

function isFulfilled<T>(result: PromiseSettledResult<T>): result is PromiseFulfilledResult<T>;
const results = await Promise.allSettled(promises);
const fulfilledValues = results.filter(isFulfilled).map(result => result.value);

isRejected

Checks whether a result from Promise.allSettled is rejected.

function isRejected(result: PromiseSettledResult<unknown>): result is PromiseRejectedResult;
const results = await Promise.allSettled(promises);
const rejectionReasons = results.filter(isRejected).map(result => result.reason);