Skip to main content
ts-chas gives you the building blocks for writing TypeScript that is explicit about errors, safe at runtime, and easy to compose. Instead of scattered try/catch blocks and null checks, you get a suite of tightly integrated modules: Result, Guard, Task, Option, TaggedErrors, and Pipe/Flow that work nicely together.

Installation

Add ts-chas to your project in under a minute.

Quick Start

See the key patterns with working examples.

Core Concepts

Understand Result, Guard, Task, and more.

API Reference

Browse the full public API surface.

What’s inside

Result & ResultAsync

Replace try/catch with explicit, type-safe Result<T, E> and ResultAsync<T, E> that carry error types in the signature.

Guard

Chainable runtime type validators that double as TypeScript type predicates, with built-in schema parsing and Standard Schema v1 support.

Task

Lazy async pipelines with retries, timeouts, circuit breakers, throttling, and caching; all composable and cancellable.

Tagged Errors

Discriminated error unions built on native Error objects, enabling exhaustive pattern matching across your call stack.

Option

Model the presence or absence of a value explicitly, with the same rich API as Result.

Pipe & Flow

Compose functions into readable, reusable data pipelines with full TypeScript type inference.

Get started

1

Install the package

npm install ts-chas
2

Import the modules you need

import { chas } from 'ts-chas';             // everything
import { is } from 'ts-chas/guard';          // guard only
import { Task } from 'ts-chas/task';         // task only
3

Replace your first try/catch

import { chas } from 'ts-chas';

const result = await chas.fromPromise(
  fetch('/api/user').then(r => r.json()),
  (e) => `Fetch failed: ${e}`
);

if (result.isOk()) {
  console.log(result.value);
}
4

Explore the concepts

Read through Core Concepts to understand how the modules fit together, or jump straight to a Quick Start example.