1.2.2 • Published 4 years ago

ts-type-it v1.2.2

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

type-it

> A Typescript utility for checking types at runtime. No build steps, clear and simple syntax.


Installation

npm i ts-type-it

Screenshot

demo


Usage

import { typeIt } from "ts-type-it"

const value = { x: "foobar" } as any;

if (typeIt(value, { x: String })) { // Passes!

  x; // TS::{x:string}
}

type-it takes in any value to check, along with a simple type object. It returns a boolean value with full type inference.


Feature Support

type-it is as powerful as it is simple. It has support for tuples, strings, numbers, literals, booleans, symbols, Promises, Generators, AsyncGenerators, and nested structures, right out-of-the-box.

Classes

type-it also supports any class you define, with zero extra code. For example:

import { typeIt } from "ts-type-it"

class MyClass { }

const value = {
  x: [{y: new MyClass()}],
  z: Number
} as any;

const type = {x:[{y:MyClass}],z:42} as const;

if (typeIt(value, type)) {

  value; // TS::{x:[{y:MyClass}],z:Number}
}

Note, to use tuples or literals, the keyword 'as const' is needed to prevent Typescript from automatically widening the types. This is how you unlock length-specific tuple validation as well as literal string typing.


Literals

You can type-check against literals (again, arbitrarily nested) and everything will still work:

import { typeIt } from "ts-type-it"

const value = 400 as any;
const type = 42;

if (typeIt(value, type)) { // will return false as 400 !== 42

  value; // TS::{x:42}
}

This library can be used for validating parameters all the way to validating complex payloads, all with a minimum conceptual overhead. If you know Typescript, you know how to use type-it.


Unions

Unions can be expressed and checked via the Union keyword:

import { typeIt, Union } from "ts-type-it"

const value = 400 as any;
const type = 42;

if (typeIt(value, Union(String, {x: Number}))) {
  value; // TS::string|{x:number}
}

Additionally, Union works recursively both on the type and value levels. So having internal types of Union that also utilize Union is just fine.


Contribution

Contribution is encouraged! If I missed anything, or there's a use-case I didn't consider, definitely feel free to file an issue and/or PR. This project is licensed under the MIT license as most npm packages are. (see license.md).