Nanotechnology Promises Much

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

    0.5.2 • Public • Published

    typeok

    A tiny type-checking utility.

    import typecheck from 'typeok';
    
    typecheck({ numbers: [1, 2, 'notanumber'], string: 'typeok' });
    // { ok: false, errors: [TypeError: Expected number, got: notanumber] }

    Install

    Node

    npm install typeok

    Deno

    import typecheck from 'https://deno.land/x/typeok/index.js';

    Browser

    <script src="https://unpkg.com/typeok/dist/typeok.min.js"></script>

    In the browser context, the default export name is typeok.

    Browser (ESM)

    <script type="module">
      import typecheck from 'https://unpkg.com/typeok/dist/typeok.js';
    </script>

    Try in Flems.

    Usage

    Pass an object to the typecheck function where the given keys correspond to the types, and the values are the variables you'd like to typecheck. Simply append an s to a key string when you'd like to typecheck multiple variables of the same type, for example, strings or objects. Unrecognized types are ignored.

    typeok returns an object, { ok: boolean, errors: TypeError[] } for every check.

    typecheck({
        object: {},
        number: 1,
        strings: ['one', 'two'],
        arrays: [[1, 2], ['mixed', {}, null]]
    });
    
    // { ok: true, errors: [] }

    typeok uses regular typeof checks under the hood, and never throws. You can use the built-in typecheckers or provide your own. The built-in typecheckers include checks for:

    • number
    • array
    • boolean
    • object
    • string
    • function
    • defined

    (Note: [] will pass the built-in object check).

    Type Map Override

    You can pass an object as a second argument to override or extend the built-in typecheckers.

    typecheck({ object: [] }, { object: x => typeof x === 'object' && !Array.isArray(x) });
    // { ok: false, errors: [TypeError: Expected object, got: []] }

    You may want to piggyback on the built-in typecheckers in your own custom typecheckers, in which case, the built-in type-map is provided as a second argument for all typecheckers:

    typecheck({ object: [] }, { object: (x, is) => is.object(x) && !Array.isArray(x) });
    // { ok: false, errors: [TypeError: Expected object, got: []] }

    It may get tedious passing the same overrides every single time you need to check your variables. A simple way around this is wrapping the default typeok function:

    import typeok from 'typeok';
    
    const overrides = { MinimumAge: (x, is) => is.number(x) && x >= 21 };
    const typecheck = obj => typeok(obj, overrides);
    
    typecheck({ MinimumAge: 20 });
    // { ok: false, errors: [TypeError: Expected MinimumAge, got: 20] }

    Credits

    Check out jty by Alex Ewerlöf, which was the original inspiration for this utility.

    Install

    npm i typeok

    DownloadsWeekly Downloads

    1

    Version

    0.5.2

    License

    MIT

    Unpacked Size

    7.26 kB

    Total Files

    6

    Last publish

    Collaborators

    • kevinfiol