Type safe Option and Result types – inspired by Rust.
- Node >= 12
- npm >= 6
Please note that the TypeScript target is ES6.
npm install @usefultools/monads
See full Option<T>
API documentation here.
import { Option, Some, None } from "@usefultools/monads"
function 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"
More Option<T>
examples here.
See full Result<T, E>
API documentation here.
import { Result, Ok, Err } from "@usefultools/monads"
function getIndex(values: string[], value: string): Result<number, string> {
const index = values.indexOf(value)
switch (index) {
case -1:
return Err("Value not found")
default:
return Ok(index)
}
}
console.log(getIndex(["a", "b", "c"], "b")) // Ok(1)
console.log(getIndex(["a", "b", "c"], "z")) // Err("Value not found")
More Result<T, E>
examples here.
If you have comments, complaints, or ideas for improvements, feel free to open an issue or a pull request! See Contributing guide for details about project setup, testing, etc.
This library was created by @qworks.io. Main author and maintainer is Slavo Vojacek.
Contributors: Slavo Vojacek
@usefultools/monads
is available under the ISC license. See the LICENSE file for more info.