Skip to content

wopjs/tsur

Repository files navigation

Docs Build Status npm-version Coverage Status minified-size

TypeScript goodies inspired by Rust.

This project draws inspiration from Rust, but is designed to be more ergonomic and tailored to TypeScript's features and syntax.

Install

npm add @wopjs/tsur

Usage

Option

import { Option, Some, None } from "@wopjs/tsur";

const maybeNumber = Some(42);

if (maybeNumber.isSome()) {
  console.log(maybeNumber.unwrap()); // 42
} else {
  console.log("There is no number");
}

const maybeString = None;

if (maybeString.isSome()) {
  console.log(maybeString.unwrap());
} else {
  console.log("There is no string"); // "There is no string"
}

Result

import { Result, Ok, Err } from "@wopjs/tsur";

function divide(a: number, b: number): Result<number, string> {
  if (b === 0) {
    return Err("Cannot divide by zero");
  }
  return Ok(a / b);
}

const result = divide(10, 2);

if (result.isOk()) {
  console.log(result.unwrap()); // 5
} else {
  console.log(result.unwrapErr()); // "Cannot divide by zero"
}

Chaining

import { Option } from "@wopjs/tsur";

function get(obj: any, key: string): Option<any> {
  return key in obj ? Some(obj[key]) : None;
}

const obj = {
  a: {
    b: {
      c: 42,
    },
  },
};

const result = get(obj, "a")
  .map(x => x.b)
  .unwrapOr("default");

Array

Many useful array methods are added:

import { filterMap, Some, None } from "@wopjs/tsur";

const arr = [1, 2, 3, 4, 5];

const result = filterMap(arr, x => (x % 2 === 0 ? Some(x * 2) : None));

console.log(result); // [4, 8]

Or you can patch them to the native array:

import "@wopjs/tsur/patches/array";

const arr = [1, 2, 3, 4, 5];

const result = arr.filterMap(x => (x % 2 === 0 ? Some(x * 2) : None));

console.log(result); // [4, 8]

See docs for more details.

License

MIT @ CRIMX