Skip to content

A set of classes and utilities for JavaScript type inspection and validation.

License

Notifications You must be signed in to change notification settings

tsdotnet/reflection

Folders and files

NameName
Last commit message
Last commit date
May 23, 2020
Apr 21, 2021
May 23, 2020
Feb 12, 2022
Dec 18, 2022
Dec 18, 2022
Dec 18, 2022
Feb 12, 2022
May 23, 2020
Feb 12, 2022
May 23, 2020
May 23, 2020
Apr 21, 2021
May 8, 2020
Jul 22, 2024
Nov 19, 2024
May 1, 2020
May 1, 2020
Feb 12, 2022

Repository files navigation

alt text tsdotnet / reflection

GitHub license npm-publish npm version

A set of classes and utilities for JavaScript type inspection and validation.

Docs

tsdotnet.github.io/reflection

TypeValidator<T>

Benefits

  • Allows for run-time validation and checking of dynamic types as well as integrated type-guarding.
  • Super easy to use, basically only requires a copy paste.
  • Works with literals!

Usage

Step 1: Declare the expected type/interface.

interface MyType
{
    a: object;
    b: string;
    c: number;
    d: boolean;
    e: {
        f: string;
        g: boolean;
        h: [
            number,
            boolean,
            string
        ];
    };
}

Step 2: Copy the interface as an actual object and <type> the validator

The following can be done with pure JavaScript and still work.

const myTypeValidator = new TypeValidator<MyType>(
{
    a: Object,
    b: String,
    c: Number,
    d: Boolean,
    e: {
        f: String,
        g: Boolean,
        h: [
            Number,
            Boolean,
            String
        ]
    }
});

Step 3: validate as many times as you want:

const myItem = {
    a: {},
    b: 'hello',
    c: 1,
    d: true,
    e: {
        f: 'whatever',
        g: false,
        h: [
            0,
            true,
            '2'
        ]
    },
    i: 'noise'
};

// no compile-time type errors!
if (MyTypeValidator.isSubsetOf(myItem)) {
    console.log(myItem.e.h.length); // 3
    console.log(myItem.b); // "hello"
} else {
    throw new TypeError('Invalid type!');
}