Option and Result types for JavaScript; TypeScript first

Usage no npm install needed!

<script type="module">
  import threestupMonads from 'https://cdn.skypack.dev/@threestup/monads';


Type safe Option and Result type

Inspired by Rust.

Previously known on npm as tsp-monads.

CircleCI Codecov npm version GuardRails badge

NOTE: Works with TypeScript 2+ and JavaScript (ES6+). strictNullChecks option / flag strongly recommended.



npm install @threestup/monads

Basic Usage

import { Option, Some, None } from '@threestup/monads'

const divide = (numerator: number, denominator: number): Option<number> => {
    if (denominator === 0) {
        return None
    } else {
        return Some(numerator / denominator)

// The return value of the function is an option
const result = divide(2.0, 3.0)

// Pattern match to retrieve the value
const message = result.match({
    some: res => `Result: ${res}`,
    none: 'Cannot divide by 0',

console.log(message) // 'Result: 0.6666666666666666'
import { Result, Ok, Err } from '@threestup/monads'

function getIndex(values: string[], value: string): Result<number, string> {
    const index = values.indexOf(value)
    switch (index) {
        case -1:
            return Err('Value not found')
            return Ok(index)

console.log(getIndex(['a', 'b', 'c'], 'b')) // Ok(1)
console.log(getIndex(['a', 'b', 'c'], 'z')) // Err('Value not found')