Skip to content

Strict, declarative, extensible runtime type checker for JavaScript

License

Notifications You must be signed in to change notification settings

umbrellio/typecheck

Repository files navigation

typecheck

Simple, strict, extensible runtime type checker for JavaScript.

Basic usage

import T from '@umbrellio/typecheck'

// define a type
const userType = T.Struct({
  email: T.String,
  password: T.String,
  age: T.Option(T.Number),
  role: T.Sum('admin', 'support'),
})

// run a type check
T.check(userType, {
  email: '[email protected]',
  password: '12345',
  age: 12,
  role: 'admin',
}) // => true

Installation

Install with yarn:

$ yarn add @umbrellio/typecheck
# or with npm:
$ npm i -S @umbrellio/typecheck

Built-in type reference

Primitive types

  • T.String: kek, new String('pek')
  • T.Number: 69, new Number(100), -2131.31
  • T.Boolean: true, false

Arrays

Signature: T.Array(type)

T.Array(T.String) // [], ['kek', 'pek']
T.Array(T.Sum(T.Boolean, T.Number)) // [], [true, 1]

Option

Signature: T.Option(type)

T.Option(T.String) // null, undefined, 'some string'
T.Option(T.Array(T.Number)) // null, undefined, [], [69]

Struct

Signature: T.Struct(schema) where schema is an object

T.Struct({ name: T.String }) // { name: 'Ivan' }
T.Struct({ email: T.String, age: T.Option(T.Number) }) // { email: '[email protected]', age: 69 }

Sum

Signature: T.Sum(...types)

T.Sum(T.Number, T.String, T.Struct({ name: T.String })) // 69, '69', { name: 'ivan' }

Advanced usage

Custom types

import T from '@umbrellio/typecheck'

// age is a positive number
const Age = new T.Type(v => T.check(T.Number, v) && v > 0)

const userType = T.Struct({
  email: T.String,
  age: T.Option(Age),
})

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/umbrellio/typecheck.

License

Released under MIT License.

Authors

Created by Alexander Komarov.

Supported by Umbrellio

About

Strict, declarative, extensible runtime type checker for JavaScript

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published