or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced-types.mdarray-types.mdbasic-types.mdbuiltin-types.mdgeneric-utils.mdindex.mdnumber-validation.mdobject-types.mdstring-types.md
tile.json

tessl/npm-is-what

JavaScript and TypeScript type checking utility functions providing precise type validation with automatic type narrowing.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/is-what@5.4.x

To install, run

npx @tessl/cli install tessl/npm-is-what@5.4.0

index.mddocs/

is-what

is-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.

Package Information

  • Package Name: is-what
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install is-what

Core Imports

import { 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";

Basic Usage

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);
}

Architecture

is-what is built around several key components:

  • Core Utility: getType() function provides consistent type checking using Object.prototype.toString
  • Type Guards: All functions are TypeScript type guards providing automatic type narrowing
  • Modular Design: Each function in separate file for optimal tree-shaking
  • Edge Case Handling: Special treatment for NaN, plain objects vs class instances
  • Zero Dependencies: Self-contained implementation with no external dependencies

Capabilities

Basic Type Checking

Fundamental 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;

Basic Types

Number Validation

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;

Number Validation

Array Type Checking

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[];

Array Types

String Validation

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;

String Types

Object Type Checking

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 };

Object Types

Built-in Object Detection

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;

Built-in Types

Advanced Type Checking

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>;

Advanced Types

Generic Type Utilities

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;

Generic Utilities