Package Exports
- @binarymuse/ts-stdlib
- @binarymuse/ts-stdlib/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@binarymuse/ts-stdlib) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ts-stdlib
@binarymuse/ts-stdlib
is a set of classes, utilities, and types to make working with TypeScript a little bit nicer. These concepts can be found in many different languages, although many of the implementations here are inspired by Rust.
The library includes:
Option<T>
- a type that represents a value (Some<T>
) or the absense of one (None
)Result<T, E>
- a type that represents a successful result (Ok<T>
) or an err (Err<E>
)Rc<T>
- a reference counted resource
Installation
npm install @binarymuse/ts-stdlib
# or
pnpm add @binarymuse/ts-stdlib
# or
yarn add @binarymuse/ts-stdlib
Option<T>
An Option<T>
has two variants:
Some<T>
, representing the existance of the inner valueNone
, representing the absense of an inner value
Creating an option
Some(value: T): Option<T>
- create aSome
from a value; note that callingSome(undefined)
orSome(null)
will returnNone
None
- reference to the singletonNone
value
Querying the inner value
Option<T>.isSome(): boolean
Returns
true
if the option isSome
,false
otherwiseOption<T>.isSomeAnd(fn: (value: T) => boolean): boolean
Returns
true
if the option isSome
and callingfn
with the inner value returnstrue
,false
otherwiseOption<T>.isNone(): boolean
Returns
true
if the option isNone
,false
otherwiseOption<T>.isNoneOr(fn: (value: T) => boolean): boolean
Returns true if the option is
None
or callingfn
with the inner value returnstrue
,false
otherwiseOption<T>.unwrap(): T
Returns the underlying value if the option is
Some
, otherwise throws an exceptionOption<T>.expect(msg: string): T
Returns the underlying value if the option is
Some
, otherwise throws an exception with a custom messageOption<T>.unwrapOr(default: T): T
Returns the underlying value if the option is
Some
, otherwise returnsdefault
Option<T>.unwrapOrElse(fn: () => T): T
Returns the underlying value if the option is
Some
, otherwise callsfn
and returns its return valueOption<T>.filter(fn: (T) => boolean): Option<T>
Returns
None
if the option isNone
, otherwise callsfn
with the inner value and returns:Some<T>
with the original wrapped value iffn
returns trueNone
iffn
returns false
Option<T>.match<U>(cases: { some: (value: T) => U; none: () => U }): U
Returns the result of calling
cases.some()
with the inner value if the option isSome
, otherwise returns the result of callingcases.none()
Option<T>.equals(other: Option<T>): boolean
Returns true if both options are
Some
and their inner values are equal using the JavaScript==
operator, or if both options areNone
. As a special case, if both options areSome
and their inner values are alsoSome
, their inner values are compared withequals()
.Option<T>.strictEquals(other: Option<T>): boolean
Returns true if both options are
Some
and their inner values are equal using the JavaScript===
operator, or if both options areNone
. As a special case, if both options areSome
and their inner values are alsoSome
, their inner values are compared withstrictEquals()
.
Transforming options
Option<T>.map<U>(fn: (value: T) => U): Option<U>
Returns an
Option<U>
by mapping the inner value of the source option withfn
Option<T>.mapOr<U>(defaultValue: U, mapFn: (value: T) => U): Option<U>
Returns an option wrapping the provided
defaultValue
if the option isNone
, or callsmapFn
with the inner value and returns a new option wrapping its return valuemapOrElse: <U>(defaultFn: () => U, mapFn: (value: T) => U): Option<U>
Returns an option wrapping the return value of
defaultFn
if the option isNone
, or callsmapFn
with the inner value and returns a new option wrapping its return valueOption<T>.and<U>(other: Option<U>): Option<U>
Returns
None
if the source option isNone
, otherwise returnsother
Option<T>.andThen<U>(fn: (value: T) => Option<U>): Option<U>
Returns
None
if the source option isNone
, otherwise callsfn
with the inner value and returns the result.Option<T>.or(other: Option<T>): Option<T>
Returns the source option if it is
Some
, otherwise returnsother
Option<T>.orElse(fn: () => Option<T>): Option<T>
Returns the source option if it is
Some
, otherwise callsfn
and returns the resultOption<T>.xor(other: Option<T>) => Option<T>
Returns the source option or
other
if exactly one of them isSome
, otherwise returnsNone
Option<T>.flatten(): Option<T>
Converts from
Option<Option<T>>
toOption<T>
. Only one level of nesting is removed.