JavaScript and TypeScript type checking utility functions providing precise type validation with automatic type narrowing.
npx @tessl/cli install tessl/npm-is-what@5.4.0is-what is a comprehensive TypeScript-first type checking utility library that provides precise type validation functions designed to overcome the limitations of existing type checking solutions. It offers reliable type checking with automatic TypeScript type narrowing, special handling for edge cases like NaN, and proper distinction between plain objects and class instances.
npm install is-whatimport { isString, isNumber, isPlainObject, getType } from "is-what";For CommonJS:
const { isString, isNumber, isPlainObject, getType } = require("is-what");Import specific functions as needed:
import {
isString, isNumber, isBoolean, isArray,
isPlainObject, isFunction, isPrimitive,
isOneOf, isInstanceOf, getType
} from "is-what";import { isString, isNumber, isPlainObject, isArray } from "is-what";
// Basic type checking with TypeScript type narrowing
if (isString(value)) {
// TypeScript now knows value is string
console.log(value.toUpperCase());
}
if (isNumber(value)) {
// TypeScript now knows value is number (but not NaN)
console.log(value.toFixed(2));
}
// Plain object detection (excludes class instances)
if (isPlainObject(obj)) {
// obj is definitely a plain object {}
console.log(Object.keys(obj));
}
// Array checking
if (isArray(list)) {
console.log(list.length);
}is-what is built around several key components:
getType() function provides consistent type checking using Object.prototype.toStringFundamental type checking functions for primitives and basic JavaScript types with TypeScript type guards.
function isString(payload: unknown): payload is string;
function isNumber(payload: unknown): payload is number;
function isBoolean(payload: unknown): payload is boolean;
function isBigInt(payload: unknown): payload is bigint;
function isSymbol(payload: unknown): payload is symbol;
function isNull(payload: unknown): payload is null;
function isUndefined(payload: unknown): payload is undefined;Specialized number validation functions including NaN handling, positive/negative checks, and integer validation.
function isNumber(payload: unknown): payload is number;
function isNaNValue(payload: unknown): payload is typeof Number.NaN;
function isInteger(payload: unknown): payload is number;
function isPositiveNumber(payload: unknown): payload is number;
function isNegativeNumber(payload: unknown): payload is number;Array validation functions including empty/full array checks and general array detection.
function isArray(payload: unknown): payload is unknown[];
function isEmptyArray(payload: unknown): payload is [];
function isFullArray(payload: unknown): payload is unknown[];String type checking including empty/full string validation and hexadecimal string detection.
function isString(payload: unknown): payload is string;
function isEmptyString(payload: unknown): payload is "";
function isFullString(payload: unknown): payload is string;
function isHexDecimal(payload: unknown, length?: number): payload is string;Comprehensive object type validation including plain object detection, empty/full object checks, and object-like detection.
function isObject(payload: unknown): payload is PlainObject;
function isPlainObject(payload: unknown): payload is PlainObject;
function isAnyObject(payload: unknown): payload is PlainObject;
function isObjectLike<T extends PlainObject>(payload: unknown): payload is T;
function isEmptyObject(payload: unknown): payload is { [K in string | symbol | number]: never };
function isFullObject(payload: unknown): payload is PlainObject;
type PlainObject = { [key in string | number | symbol]: unknown };Type checking for JavaScript built-in objects and browser/Node.js specific types.
function isDate(payload: unknown): payload is Date;
function isError(payload: unknown): payload is Error;
function isRegExp(payload: unknown): payload is RegExp;
function isMap(payload: unknown): payload is Map<unknown, unknown>;
function isSet(payload: unknown): payload is Set<unknown>;
function isWeakMap(payload: unknown): payload is WeakMap<object, unknown>;
function isWeakSet(payload: unknown): payload is WeakSet<object>;
function isPromise(payload: unknown): payload is Promise<unknown>;
function isBlob(payload: unknown): payload is Blob;
function isFile(payload: unknown): payload is File;Advanced utilities for function detection, primitive checking, and iterable validation.
function isFunction(payload: unknown): payload is AnyFunction;
function isPrimitive(payload: unknown): payload is boolean | null | undefined | number | string | symbol | bigint;
function isIterable(payload: unknown): payload is Iterable<unknown>;
type AnyFunction = (...args: any[]) => any;
type AnyAsyncFunction = (...args: unknown[]) => Promise<unknown>;Generic type checking utilities including factory functions and instance validation.
function getType(payload: unknown): string;
function isType<T extends AnyFunction | AnyClass>(payload: unknown, type: T): payload is T;
function isInstanceOf<T extends AnyClass>(value: unknown, class_: T): value is T;
function isOneOf<A, B extends A, C extends A>(
a: TypeGuard<A, B>,
b: TypeGuard<A, C>
): TypeGuard<A, B | C>;
type AnyClass = new (...args: unknown[]) => unknown;