2.0.1 • Published 4 years ago

has-shape v2.0.1

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

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
2.0.1

4 years ago

2.0.0

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago