has-shape
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

hasShape() on NPM typings: included dependencies: 0

Super simple runtime type-checking for Javascript objects.

Also provides relevant typing for Typescript and type-aware IDEs (e.g. VS Code).

Installation

npm install has-shape

Basic usage

hasShape() receives a value, and a shape specifier. It then determines whether the value matches the shape.

import hasShape from 'has-shape';

// ...

if (hasShape(formData, { name: 'string', password: isValidPassword })) {
    // ...
}

In this example, formData must pass the following conditions:

  • It is an object.
  • It has a name property, which is a string.
  • It has a password property, which passes the isValidPassword predicate.

Supported shapes

  • Object shapes, e.g. { name: 'string', age: 'number' }
  • typeof strings
    • 'number', 'string', etc.
    • Also includes 'any' and 'unknown'. These match any type, and the typings map to the matching TS type.
  • Nested object shapes
  • Regular Expressions
  • Predicate functions
  • Assertion functions
  • Array shapes (via arrayShape())

Additional functions

arrayShape()

Creates a shape which matches arrays containing elements of the given specifier.

if (hasShape(value, arrayShape('number'))) { // True if value is an array of numbers

By default, empty arrays are allowed. This can be overridden by passing an options object with disallowEmpty: true.

const teamShape = {
    name: 'string',
    members: arrayShape({
        name: 'string',
        age: 'number'
    }, { disallowEmpty: true })
};

if (hasShape(obj, teamShape)) {

assertShape()

The same as hasShape(), but rather than returning a boolean, instead throws a descriptive error if the value does not match the shape.

assertShape(person, personShape); // Throws if person does not match personShape

shape()

Creates an assertion function for the given shape.

const personShape = shape({ name: 'string', age: 'number' });

personShape(person); // Throws if person does not match personShape

Readme

Keywords

none

Package Sidebar

Install

npm i has-shape

Weekly Downloads

0

Version

2.0.1

License

ISC

Unpacked Size

16.4 kB

Total Files

17

Last publish

Collaborators

  • flame10a