npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

typso

v1.0.0

Published

A comprehensive runtime type-checking library for JavaScript, React, Node.js, and Express.

Readme

Typso Documentation

Welcome to the Typso library, a comprehensive type-checking solution designed to provide robust runtime validation for JavaScript/Node.js environments, React, Express, and beyond. With Typso, you can enforce strict type checks on your functions, objects, and React components while maintaining flexibility for more dynamic and asynchronous use cases.

Overview

Typso enables:

  • Runtime type-checking for variables, function arguments, return types, and object schemas.
  • Integration with React for prop validation.
  • Middleware for Express to validate request bodies and query parameters.
  • Support for complex types like arrays, objects, and unions.
  • Optional features like strict/loose modes, async validations, schema normalization, and lifecycle hooks.

Installation

Install Typso using npm:

npm install typso

Core Features

1. Basic Type Checking

Typso can enforce basic type checks for primitive types such as string, number, boolean, and more.

Usage:

const { TypeChecker } = require('typso');

TypeChecker.checkType('Hello', 'string');  // Passes
TypeChecker.checkType(123, 'string');      // Throws TypeError: Expected string but received number

Supported Types:

  • string
  • number
  • boolean
  • function
  • object

2. Instance Checking

You can check if a variable is an instance of a particular class.

Usage:

const { TypeChecker } = require('typso');

class MyClass {}
const instance = new MyClass();

TypeChecker.checkInstance(instance, MyClass);  // Passes
TypeChecker.checkInstance({}, MyClass);        // Throws TypeError: Expected instance of MyClass

3. Array Type Checking

Typso can check the type of elements inside an array.

Usage:

const { TypeChecker } = require('typso');

const myArray = [1, 2, 3];
TypeChecker.checkArray(myArray, 'number');  // Passes

const invalidArray = [1, '2', 3];
TypeChecker.checkArray(invalidArray, 'number');  // Throws TypeError

4. Union Type Checking

For scenarios where variables can belong to multiple types, you can enforce union type checking.

Usage:

const { TypeChecker } = require('typso');

TypeChecker.checkUnion(42, ['string', 'number']);  // Passes
TypeChecker.checkUnion(true, ['string', 'number']); // Throws TypeError

5. Object Schema Validation

Typso provides a mechanism to define a schema for objects and enforce type checks on each property of the object.

Usage:

const { TypeChecker } = require('typso');

const userSchema = {
  name: 'string',
  age: 'number',
  hobbies: ['array', 'string'],
};

const user = {
  name: 'Alice',
  age: 25,
  hobbies: ['Reading', 'Coding']
};

TypeChecker.checkObject(user, userSchema);  // Passes

Advanced Features

6. Range and Length Validation

You can enforce numeric ranges or string/array lengths.

Range Validation:

TypeChecker.checkRange(50, 10, 100);  // Passes
TypeChecker.checkRange(150, 10, 100); // Throws RangeError: Value should be between 10 and 100

Length Validation:

TypeChecker.checkLength('hello', 1, 10);  // Passes
TypeChecker.checkLength('too long string', 1, 10); // Throws LengthError

7. Custom Validations

Typso allows you to create custom validations using functions.

Usage:

const validColors = ['red', 'green', 'blue'];

TypeChecker.checkCustom('green', (value) => validColors.includes(value));  // Passes
TypeChecker.checkCustom('yellow', (value) => validColors.includes(value));  // Throws ValidationError

8. Default Values and Normalization

You can provide default values when some object properties are missing and normalize them.

Usage:

const { normalize } = require('typso');

const userSchema = {
  name: { type: 'string', default: 'Anonymous' },
  age: { type: 'number', default: 18 },
};

const user = {
  email: '[email protected]'
};

const normalizedUser = normalize(userSchema, user);
console.log(normalizedUser);  // { name: 'Anonymous', age: 18, email: '[email protected]' }

9. Asynchronous Validations

Typso supports async validations, which is useful for tasks like checking if a value exists in a database.

Usage:

const { TypeChecker } = require('typso');

async function isUsernameAvailable(username) {
  const availableUsernames = ['john', 'jane', 'doe'];
  return availableUsernames.includes(username);
}

async function validateUsername(username) {
  await TypeChecker.checkAsync(username, isUsernameAvailable);  // Passes or throws error
}

validateUsername('john');  // Passes
validateUsername('nonexistent');  // Throws ValidationError

10. Strict vs. Loose Mode

Typso can operate in strict mode (more rigorous checks) or loose mode (allows null or undefined values in some cases).

Usage:

TypeChecker.enforceStrictMode(true);  // Enable strict mode
TypeChecker.checkType(null, 'string');  // Throws error in strict mode
TypeChecker.enforceStrictMode(false);  // Loose mode allows null values

11. Declarative Schema Validation

You can define schemas with rules for validation, such as minimum length, maximum length, and patterns.

Usage:

const schema = {
  name: { type: 'string', minLength: 2, maxLength: 50 },
  age: { type: 'number', min: 18, max: 100 },
  email: { type: 'string', pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/ },  // Email regex
};

TypeChecker.validateDeclarativeSchema(user, schema);

12. Lifecycle Hooks

Typso supports lifecycle hooks like beforeValidate and afterValidate.

Usage:

const schemaWithHooks = {
  name: 'string',
  beforeValidate: () => console.log('Starting validation...'),
  afterValidate: () => console.log('Validation complete!'),
};

TypeChecker.validateWithLifecycle(user, schemaWithHooks);

Integration with React

Prop Types Validation

Typso integrates seamlessly with React components for prop validation using higher-order components (HOCs).

Usage:

import { withPropTypes } from 'typso';

const Greeting = ({ name, age }) => (
  <div>
    <h1>Hello, {name}!</h1>
    <p>Age: {age}</p>
  </div>
);

const GreetingWithTypes = withPropTypes(Greeting, {
  name: 'string',
  age: 'number',
});

export default GreetingWithTypes;

Integration with Express

Express Middleware for Request Validation

Typso provides middleware for validating request bodies or query parameters in Express.

Usage:

const express = require('express');
const { validateRequestBody } = require('typso');

const app = express();
app.use(express.json());

const userSchema = {
  name: 'string',
  age: 'number',
  email: 'string',
};

app.post('/user', validateRequestBody(userSchema), (req, res) => {
  res.json({ success: true });
});

app.listen(3000);

Utility Functions

checkRange

Check if a number falls within a given range.

Syntax:

TypeChecker.checkRange(value, min, max);

checkLength

Check the length of strings or arrays.

Syntax:

TypeChecker.checkLength(value, minLength, maxLength);

checkCustom

Perform custom validations using a function.

Syntax:

TypeChecker.checkCustom(value, validationFunction);

checkAsync

Perform asynchronous validations.

Syntax:

TypeChecker.checkAsync(value, asyncValidationFunction);

normalize

Automatically fill missing fields in objects with default values as defined in the schema.

Syntax:

normalize(schema, object);

Configuration

Strict Mode

Toggle strict or loose mode for type validation.

Syntax:

TypeChecker.enforceStrictMode(true);  // Enable strict mode
TypeChecker.enforceStrictMode(false); // Enable loose mode

Logging Warnings

Enable or disable logging warnings instead of throwing errors.

Syntax:

TypeChecker.enableWarnings(true);  // Enable warnings
TypeChecker.enableWarnings(false); // Disable warnings

Conclusion

Typso is a versatile and powerful type-checking library for JavaScript that works across various environments. It’s designed to be flexible, easy to integrate, and capable of handling simple to complex type validations, including async validations, schema normalization, and lifecycle hooks.

With Typso, you can enforce strong runtime validation and ensure that your data structures, function arguments, and component props adhere to expected types, making your applications more robust and reliable.