1.0.0 • Published 1 year ago
@kolharsam/option-ts v1.0.0
option-ts
This library provides Rust-inspired Option and Result types for TypeScript, enabling more robust error handling and null safety in your TypeScript projects.
Installation
npm install @kolharsam/option-tsUsage
Option
import { Option, Some, None } from '@kolharsam/option-ts';
const someValue: Option<number> = Some(5);
const noneValue: Option<number> = None();
console.log(someValue.isSome()); // true
console.log(noneValue.isNone()); // true
const doubled = someValue.map(x => x * 2);
console.log(doubled.get()); // 10
const safeDiv = (a: number, b: number): Option<number> => {
if (b === 0) return None();
return Some(a / b);
};
console.log(safeDiv(10, 2).getOrElse(0)); // 5
console.log(safeDiv(10, 0).getOrElse(0)); // 0Result
import { Result, Ok, Err } from '@kolharsam/option-ts';
const okResult: Result<number, string> = Ok(5);
const errResult: Result<number, string> = Err("An error occurred");
console.log(okResult.isOk()); // true
console.log(errResult.isErr()); // true
const doubled = okResult.map(x => x * 2);
console.log(doubled.toOk().get()); // 10
const safeDiv = (a: number, b: number): Result<number, string> => {
if (b === 0) return Err("Division by zero");
return Ok(a / b);
};
console.log(safeDiv(10, 2).toOk().getOrElse(0)); // 5
console.log(safeDiv(10, 0).toErr().get()); // "Division by zero"API Reference
Option
Some<T>(value: T): Option<T>None<T>(): Option<T>get(): TgetOrElse(defaultValue: T): Tmap<U>(fn: (val: T) => U): Option<U>inspect(fn: (val: T) => void): Option<T>isSome(): booleanisNone(): booleanisSomeAnd(fn: (val: T) => boolean): booleanisNoneOr(fn: (val: T) => boolean): booleanasSlice(): T[] | []expect(msg: string): Tunwrap(): TunwrapOr(def: T): TunwrapOrElse(fn: () => T): TmapOr<U>(def: U, fn: (val: T) => U): UmapOrElse<U>(def: () => U, fn: (val: T) => U): UokOr<E>(err: E): Result<T, E>okOrElse<E>(fn: () => E): Result<T, E>and<U>(optionB: Option<U>): Option<U>andThen<U>(fn: (val: T) => Option<U>): Option<U>or(optionB: Option<T>): Option<T>orElse(optFn: () => Option<T>): Option<T>xor(optionB: Option<T>): Option<T>zip<U>(other: Option<U>): Option<[T, U]>zipWith<U, V>(other: Option<U>, fn: (current: T, other: U) => V): Option<V>
Result<T, E>
Ok<T, E>(value: T): Result<T, E>Err<T, E>(error: E): Result<T, E>isOk(): booleanisOkAnd(fn: (val: T) => boolean): booleanisErr(): booleanisErrAnd(fn: (val: E) => boolean): booleantoOk(): Option<T>toErr(): Option<E>inspect(fn: (val: T) => void): Result<T, E>inspectErr(fn: (val: E) => void): Result<T, E>map<V>(f: (val: T) => V): Result<V, E>mapOr<V>(def: V, f: (val: T) => V): VmapErr<F>(fn: (err: E) => F): Result<T, F>expect(msg: string): Tunwrap(): TunwrapOrDefault(def: T): TexpectErr(msg: string): EunwrapErr(): Eand<V>(res: Result<V, E>): Result<V, E>andThen<V>(op: (val: T) => Result<V, E>): Result<V, E>or<F>(res: Result<T, F>): Result<T, F>orElse<F>(op: (err: E) => Result<T, F>): Result<T, F>unwrapOr(def: T): TunwrapOrElse(op: (err: E) => T): T
Utility Functions
unzip<T, U>(option: Option<[T, U]>): [Option<T>, Option<U>]transpose<T, E>(option: Option<Result<T, E>>): Result<Option<T>, E>flatten<T>(option: Option<Option<T>>): Option<T>transposeResult<T, E>(res: Result<Option<T>, E>): Option<Result<T, E>>flattenResult<T, E>(res: Result<Result<T, E>, E>): Result<T, E>
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License.