JSPM

option-t

33.1.5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 81014
  • Score
    100M100P100Q186107F
  • License MIT

Types and implementations whose APIs are inspired by Rust's `Option<T>` and `Result<T, E>`.

Package Exports

  • option-t
  • option-t/Maybe
  • option-t/Maybe/Maybe
  • option-t/Maybe/and
  • option-t/Maybe/andThen
  • option-t/Maybe/andThenAsync
  • option-t/Maybe/expect
  • option-t/Maybe/inspect
  • option-t/Maybe/map
  • option-t/Maybe/mapAsync
  • option-t/Maybe/mapOr
  • option-t/Maybe/mapOrAsync
  • option-t/Maybe/mapOrElse
  • option-t/Maybe/mapOrElseAsync
  • option-t/Maybe/or
  • option-t/Maybe/orElse
  • option-t/Maybe/orElseAsync
  • option-t/Maybe/toNullable
  • option-t/Maybe/toUndefinable
  • option-t/Maybe/unwrap
  • option-t/Maybe/unwrapOr
  • option-t/Maybe/unwrapOrElse
  • option-t/Maybe/unwrapOrElseAsync
  • option-t/Maybe/xor
  • option-t/Nullable
  • option-t/Nullable/Nullable
  • option-t/Nullable/and
  • option-t/Nullable/andThen
  • option-t/Nullable/andThenAsync
  • option-t/Nullable/expect
  • option-t/Nullable/inspect
  • option-t/Nullable/map
  • option-t/Nullable/mapAsync
  • option-t/Nullable/mapOr
  • option-t/Nullable/mapOrAsync
  • option-t/Nullable/mapOrElse
  • option-t/Nullable/mapOrElseAsync
  • option-t/Nullable/or
  • option-t/Nullable/orElse
  • option-t/Nullable/orElseAsync
  • option-t/Nullable/toUndefinable
  • option-t/Nullable/unwrap
  • option-t/Nullable/unwrapOr
  • option-t/Nullable/unwrapOrElse
  • option-t/Nullable/unwrapOrElseAsync
  • option-t/Nullable/xor
  • option-t/PlainOption
  • option-t/PlainOption/Option
  • option-t/PlainOption/and
  • option-t/PlainOption/andThen
  • option-t/PlainOption/andThenAsync
  • option-t/PlainOption/asMut
  • option-t/PlainOption/drop
  • option-t/PlainOption/equal
  • option-t/PlainOption/expect
  • option-t/PlainOption/filter
  • option-t/PlainOption/flatten
  • option-t/PlainOption/inspect
  • option-t/PlainOption/map
  • option-t/PlainOption/mapAsync
  • option-t/PlainOption/mapOr
  • option-t/PlainOption/mapOrAsync
  • option-t/PlainOption/mapOrElse
  • option-t/PlainOption/mapOrElseAsync
  • option-t/PlainOption/okOr
  • option-t/PlainOption/okOrElse
  • option-t/PlainOption/or
  • option-t/PlainOption/orElse
  • option-t/PlainOption/orElseAsync
  • option-t/PlainOption/toNullable
  • option-t/PlainOption/toUndefinable
  • option-t/PlainOption/transpose
  • option-t/PlainOption/unwrap
  • option-t/PlainOption/unwrapOr
  • option-t/PlainOption/unwrapOrElse
  • option-t/PlainOption/unwrapOrElseAsync
  • option-t/PlainOption/xor
  • option-t/PlainResult
  • option-t/PlainResult/Result
  • option-t/PlainResult/and
  • option-t/PlainResult/andThen
  • option-t/PlainResult/andThenAsync
  • option-t/PlainResult/asMut
  • option-t/PlainResult/drop
  • option-t/PlainResult/equal
  • option-t/PlainResult/expect
  • option-t/PlainResult/flatten
  • option-t/PlainResult/inspect
  • option-t/PlainResult/map
  • option-t/PlainResult/mapAsync
  • option-t/PlainResult/mapErr
  • option-t/PlainResult/mapErrAsync
  • option-t/PlainResult/mapOr
  • option-t/PlainResult/mapOrAsync
  • option-t/PlainResult/mapOrElse
  • option-t/PlainResult/mapOrElseAsync
  • option-t/PlainResult/or
  • option-t/PlainResult/orElse
  • option-t/PlainResult/orElseAsync
  • option-t/PlainResult/toOption
  • option-t/PlainResult/transpose
  • option-t/PlainResult/tryCatch
  • option-t/PlainResult/tryCatchAsync
  • option-t/PlainResult/unwrap
  • option-t/PlainResult/unwrapOr
  • option-t/PlainResult/unwrapOrElse
  • option-t/PlainResult/unwrapOrElseAsync
  • option-t/PlainResult/unwrapOrThrowError
  • option-t/Undefinable
  • option-t/Undefinable/Undefinable
  • option-t/Undefinable/and
  • option-t/Undefinable/andThen
  • option-t/Undefinable/andThenAsync
  • option-t/Undefinable/expect
  • option-t/Undefinable/inspect
  • option-t/Undefinable/map
  • option-t/Undefinable/mapAsync
  • option-t/Undefinable/mapOr
  • option-t/Undefinable/mapOrAsync
  • option-t/Undefinable/mapOrElse
  • option-t/Undefinable/mapOrElseAsync
  • option-t/Undefinable/or
  • option-t/Undefinable/orElse
  • option-t/Undefinable/orElseAsync
  • option-t/Undefinable/toNullable
  • option-t/Undefinable/unwrap
  • option-t/Undefinable/unwrapOr
  • option-t/Undefinable/unwrapOrElse
  • option-t/Undefinable/unwrapOrElseAsync
  • option-t/Undefinable/xor
  • option-t/cjs/Maybe
  • option-t/cjs/Maybe/ErrorMessage
  • option-t/cjs/Maybe/Maybe
  • option-t/cjs/Maybe/and
  • option-t/cjs/Maybe/andThen
  • option-t/cjs/Maybe/andThenAsync
  • option-t/cjs/Maybe/expect
  • option-t/cjs/Maybe/index
  • option-t/cjs/Maybe/inspect
  • option-t/cjs/Maybe/map
  • option-t/cjs/Maybe/mapAsync
  • option-t/cjs/Maybe/mapOr
  • option-t/cjs/Maybe/mapOrAsync
  • option-t/cjs/Maybe/mapOrElse
  • option-t/cjs/Maybe/mapOrElseAsync
  • option-t/cjs/Maybe/or
  • option-t/cjs/Maybe/orElse
  • option-t/cjs/Maybe/orElseAsync
  • option-t/cjs/Maybe/toNullable
  • option-t/cjs/Maybe/toUndefinable
  • option-t/cjs/Maybe/unwrap
  • option-t/cjs/Maybe/unwrapOr
  • option-t/cjs/Maybe/unwrapOrElse
  • option-t/cjs/Maybe/unwrapOrElseAsync
  • option-t/cjs/Maybe/xor
  • option-t/cjs/Nullable
  • option-t/cjs/Nullable/ErrorMessage
  • option-t/cjs/Nullable/Nullable
  • option-t/cjs/Nullable/and
  • option-t/cjs/Nullable/andThen
  • option-t/cjs/Nullable/andThenAsync
  • option-t/cjs/Nullable/expect
  • option-t/cjs/Nullable/index
  • option-t/cjs/Nullable/inspect
  • option-t/cjs/Nullable/map
  • option-t/cjs/Nullable/mapAsync
  • option-t/cjs/Nullable/mapOr
  • option-t/cjs/Nullable/mapOrAsync
  • option-t/cjs/Nullable/mapOrElse
  • option-t/cjs/Nullable/mapOrElseAsync
  • option-t/cjs/Nullable/or
  • option-t/cjs/Nullable/orElse
  • option-t/cjs/Nullable/orElseAsync
  • option-t/cjs/Nullable/toUndefinable
  • option-t/cjs/Nullable/unwrap
  • option-t/cjs/Nullable/unwrapOr
  • option-t/cjs/Nullable/unwrapOrElse
  • option-t/cjs/Nullable/unwrapOrElseAsync
  • option-t/cjs/Nullable/xor
  • option-t/cjs/Option
  • option-t/cjs/PlainOption
  • option-t/cjs/PlainOption/Option
  • option-t/cjs/PlainOption/and
  • option-t/cjs/PlainOption/andThen
  • option-t/cjs/PlainOption/andThenAsync
  • option-t/cjs/PlainOption/asMut
  • option-t/cjs/PlainOption/drop
  • option-t/cjs/PlainOption/equal
  • option-t/cjs/PlainOption/expect
  • option-t/cjs/PlainOption/filter
  • option-t/cjs/PlainOption/flatten
  • option-t/cjs/PlainOption/index
  • option-t/cjs/PlainOption/inspect
  • option-t/cjs/PlainOption/map
  • option-t/cjs/PlainOption/mapAsync
  • option-t/cjs/PlainOption/mapOr
  • option-t/cjs/PlainOption/mapOrAsync
  • option-t/cjs/PlainOption/mapOrElse
  • option-t/cjs/PlainOption/mapOrElseAsync
  • option-t/cjs/PlainOption/okOr
  • option-t/cjs/PlainOption/okOrElse
  • option-t/cjs/PlainOption/or
  • option-t/cjs/PlainOption/orElse
  • option-t/cjs/PlainOption/orElseAsync
  • option-t/cjs/PlainOption/toNullable
  • option-t/cjs/PlainOption/toUndefinable
  • option-t/cjs/PlainOption/transpose
  • option-t/cjs/PlainOption/unwrap
  • option-t/cjs/PlainOption/unwrapOr
  • option-t/cjs/PlainOption/unwrapOrElse
  • option-t/cjs/PlainOption/unwrapOrElseAsync
  • option-t/cjs/PlainOption/xor
  • option-t/cjs/PlainResult
  • option-t/cjs/PlainResult/Result
  • option-t/cjs/PlainResult/and
  • option-t/cjs/PlainResult/andThen
  • option-t/cjs/PlainResult/andThenAsync
  • option-t/cjs/PlainResult/asMut
  • option-t/cjs/PlainResult/drop
  • option-t/cjs/PlainResult/equal
  • option-t/cjs/PlainResult/expect
  • option-t/cjs/PlainResult/flatten
  • option-t/cjs/PlainResult/index
  • option-t/cjs/PlainResult/inspect
  • option-t/cjs/PlainResult/map
  • option-t/cjs/PlainResult/mapAsync
  • option-t/cjs/PlainResult/mapErr
  • option-t/cjs/PlainResult/mapErrAsync
  • option-t/cjs/PlainResult/mapOr
  • option-t/cjs/PlainResult/mapOrAsync
  • option-t/cjs/PlainResult/mapOrElse
  • option-t/cjs/PlainResult/mapOrElseAsync
  • option-t/cjs/PlainResult/or
  • option-t/cjs/PlainResult/orElse
  • option-t/cjs/PlainResult/orElseAsync
  • option-t/cjs/PlainResult/toOption
  • option-t/cjs/PlainResult/transpose
  • option-t/cjs/PlainResult/tryCatch
  • option-t/cjs/PlainResult/tryCatchAsync
  • option-t/cjs/PlainResult/unwrap
  • option-t/cjs/PlainResult/unwrapOr
  • option-t/cjs/PlainResult/unwrapOrElse
  • option-t/cjs/PlainResult/unwrapOrElseAsync
  • option-t/cjs/PlainResult/unwrapOrThrowError
  • option-t/cjs/Result
  • option-t/cjs/Undefinable
  • option-t/cjs/Undefinable/ErrorMessage
  • option-t/cjs/Undefinable/Undefinable
  • option-t/cjs/Undefinable/and
  • option-t/cjs/Undefinable/andThen
  • option-t/cjs/Undefinable/andThenAsync
  • option-t/cjs/Undefinable/expect
  • option-t/cjs/Undefinable/index
  • option-t/cjs/Undefinable/inspect
  • option-t/cjs/Undefinable/map
  • option-t/cjs/Undefinable/mapAsync
  • option-t/cjs/Undefinable/mapOr
  • option-t/cjs/Undefinable/mapOrAsync
  • option-t/cjs/Undefinable/mapOrElse
  • option-t/cjs/Undefinable/mapOrElseAsync
  • option-t/cjs/Undefinable/or
  • option-t/cjs/Undefinable/orElse
  • option-t/cjs/Undefinable/orElseAsync
  • option-t/cjs/Undefinable/toNullable
  • option-t/cjs/Undefinable/unwrap
  • option-t/cjs/Undefinable/unwrapOr
  • option-t/cjs/Undefinable/unwrapOrElse
  • option-t/cjs/Undefinable/unwrapOrElseAsync
  • option-t/cjs/Undefinable/xor
  • option-t/cjs/index
  • option-t/esm/Maybe
  • option-t/esm/Maybe/ErrorMessage
  • option-t/esm/Maybe/Maybe
  • option-t/esm/Maybe/and
  • option-t/esm/Maybe/andThen
  • option-t/esm/Maybe/andThenAsync
  • option-t/esm/Maybe/expect
  • option-t/esm/Maybe/index
  • option-t/esm/Maybe/inspect
  • option-t/esm/Maybe/map
  • option-t/esm/Maybe/mapAsync
  • option-t/esm/Maybe/mapOr
  • option-t/esm/Maybe/mapOrAsync
  • option-t/esm/Maybe/mapOrElse
  • option-t/esm/Maybe/mapOrElseAsync
  • option-t/esm/Maybe/or
  • option-t/esm/Maybe/orElse
  • option-t/esm/Maybe/orElseAsync
  • option-t/esm/Maybe/toNullable
  • option-t/esm/Maybe/toUndefinable
  • option-t/esm/Maybe/unwrap
  • option-t/esm/Maybe/unwrapOr
  • option-t/esm/Maybe/unwrapOrElse
  • option-t/esm/Maybe/unwrapOrElseAsync
  • option-t/esm/Maybe/xor
  • option-t/esm/Nullable
  • option-t/esm/Nullable/ErrorMessage
  • option-t/esm/Nullable/Nullable
  • option-t/esm/Nullable/and
  • option-t/esm/Nullable/andThen
  • option-t/esm/Nullable/andThenAsync
  • option-t/esm/Nullable/expect
  • option-t/esm/Nullable/index
  • option-t/esm/Nullable/inspect
  • option-t/esm/Nullable/map
  • option-t/esm/Nullable/mapAsync
  • option-t/esm/Nullable/mapOr
  • option-t/esm/Nullable/mapOrAsync
  • option-t/esm/Nullable/mapOrElse
  • option-t/esm/Nullable/mapOrElseAsync
  • option-t/esm/Nullable/or
  • option-t/esm/Nullable/orElse
  • option-t/esm/Nullable/orElseAsync
  • option-t/esm/Nullable/toUndefinable
  • option-t/esm/Nullable/unwrap
  • option-t/esm/Nullable/unwrapOr
  • option-t/esm/Nullable/unwrapOrElse
  • option-t/esm/Nullable/unwrapOrElseAsync
  • option-t/esm/Nullable/xor
  • option-t/esm/Option
  • option-t/esm/PlainOption
  • option-t/esm/PlainOption/Option
  • option-t/esm/PlainOption/and
  • option-t/esm/PlainOption/andThen
  • option-t/esm/PlainOption/andThenAsync
  • option-t/esm/PlainOption/asMut
  • option-t/esm/PlainOption/drop
  • option-t/esm/PlainOption/equal
  • option-t/esm/PlainOption/expect
  • option-t/esm/PlainOption/filter
  • option-t/esm/PlainOption/flatten
  • option-t/esm/PlainOption/index
  • option-t/esm/PlainOption/inspect
  • option-t/esm/PlainOption/map
  • option-t/esm/PlainOption/mapAsync
  • option-t/esm/PlainOption/mapOr
  • option-t/esm/PlainOption/mapOrAsync
  • option-t/esm/PlainOption/mapOrElse
  • option-t/esm/PlainOption/mapOrElseAsync
  • option-t/esm/PlainOption/okOr
  • option-t/esm/PlainOption/okOrElse
  • option-t/esm/PlainOption/or
  • option-t/esm/PlainOption/orElse
  • option-t/esm/PlainOption/orElseAsync
  • option-t/esm/PlainOption/toNullable
  • option-t/esm/PlainOption/toUndefinable
  • option-t/esm/PlainOption/transpose
  • option-t/esm/PlainOption/unwrap
  • option-t/esm/PlainOption/unwrapOr
  • option-t/esm/PlainOption/unwrapOrElse
  • option-t/esm/PlainOption/unwrapOrElseAsync
  • option-t/esm/PlainOption/xor
  • option-t/esm/PlainResult
  • option-t/esm/PlainResult/Result
  • option-t/esm/PlainResult/and
  • option-t/esm/PlainResult/andThen
  • option-t/esm/PlainResult/andThenAsync
  • option-t/esm/PlainResult/asMut
  • option-t/esm/PlainResult/drop
  • option-t/esm/PlainResult/equal
  • option-t/esm/PlainResult/expect
  • option-t/esm/PlainResult/flatten
  • option-t/esm/PlainResult/index
  • option-t/esm/PlainResult/inspect
  • option-t/esm/PlainResult/map
  • option-t/esm/PlainResult/mapAsync
  • option-t/esm/PlainResult/mapErr
  • option-t/esm/PlainResult/mapErrAsync
  • option-t/esm/PlainResult/mapOr
  • option-t/esm/PlainResult/mapOrAsync
  • option-t/esm/PlainResult/mapOrElse
  • option-t/esm/PlainResult/mapOrElseAsync
  • option-t/esm/PlainResult/or
  • option-t/esm/PlainResult/orElse
  • option-t/esm/PlainResult/orElseAsync
  • option-t/esm/PlainResult/toOption
  • option-t/esm/PlainResult/transpose
  • option-t/esm/PlainResult/tryCatch
  • option-t/esm/PlainResult/tryCatchAsync
  • option-t/esm/PlainResult/unwrap
  • option-t/esm/PlainResult/unwrapOr
  • option-t/esm/PlainResult/unwrapOrElse
  • option-t/esm/PlainResult/unwrapOrElseAsync
  • option-t/esm/PlainResult/unwrapOrThrowError
  • option-t/esm/Result
  • option-t/esm/Undefinable
  • option-t/esm/Undefinable/ErrorMessage
  • option-t/esm/Undefinable/Undefinable
  • option-t/esm/Undefinable/and
  • option-t/esm/Undefinable/andThen
  • option-t/esm/Undefinable/andThenAsync
  • option-t/esm/Undefinable/expect
  • option-t/esm/Undefinable/index
  • option-t/esm/Undefinable/inspect
  • option-t/esm/Undefinable/map
  • option-t/esm/Undefinable/mapAsync
  • option-t/esm/Undefinable/mapOr
  • option-t/esm/Undefinable/mapOrAsync
  • option-t/esm/Undefinable/mapOrElse
  • option-t/esm/Undefinable/mapOrElseAsync
  • option-t/esm/Undefinable/or
  • option-t/esm/Undefinable/orElse
  • option-t/esm/Undefinable/orElseAsync
  • option-t/esm/Undefinable/toNullable
  • option-t/esm/Undefinable/unwrap
  • option-t/esm/Undefinable/unwrapOr
  • option-t/esm/Undefinable/unwrapOrElse
  • option-t/esm/Undefinable/unwrapOrElseAsync
  • option-t/esm/Undefinable/xor
  • option-t/esm/index
  • option-t/lib/Maybe
  • option-t/lib/Maybe/ErrorMessage
  • option-t/lib/Maybe/Maybe
  • option-t/lib/Maybe/and
  • option-t/lib/Maybe/andThen
  • option-t/lib/Maybe/andThenAsync
  • option-t/lib/Maybe/expect
  • option-t/lib/Maybe/index
  • option-t/lib/Maybe/inspect
  • option-t/lib/Maybe/map
  • option-t/lib/Maybe/mapAsync
  • option-t/lib/Maybe/mapOr
  • option-t/lib/Maybe/mapOrAsync
  • option-t/lib/Maybe/mapOrElse
  • option-t/lib/Maybe/mapOrElseAsync
  • option-t/lib/Maybe/or
  • option-t/lib/Maybe/orElse
  • option-t/lib/Maybe/orElseAsync
  • option-t/lib/Maybe/toNullable
  • option-t/lib/Maybe/toUndefinable
  • option-t/lib/Maybe/unwrap
  • option-t/lib/Maybe/unwrapOr
  • option-t/lib/Maybe/unwrapOrElse
  • option-t/lib/Maybe/unwrapOrElseAsync
  • option-t/lib/Maybe/xor
  • option-t/lib/Nullable
  • option-t/lib/Nullable/ErrorMessage
  • option-t/lib/Nullable/Nullable
  • option-t/lib/Nullable/and
  • option-t/lib/Nullable/andThen
  • option-t/lib/Nullable/andThenAsync
  • option-t/lib/Nullable/expect
  • option-t/lib/Nullable/index
  • option-t/lib/Nullable/inspect
  • option-t/lib/Nullable/map
  • option-t/lib/Nullable/mapAsync
  • option-t/lib/Nullable/mapOr
  • option-t/lib/Nullable/mapOrAsync
  • option-t/lib/Nullable/mapOrElse
  • option-t/lib/Nullable/mapOrElseAsync
  • option-t/lib/Nullable/or
  • option-t/lib/Nullable/orElse
  • option-t/lib/Nullable/orElseAsync
  • option-t/lib/Nullable/toUndefinable
  • option-t/lib/Nullable/unwrap
  • option-t/lib/Nullable/unwrapOr
  • option-t/lib/Nullable/unwrapOrElse
  • option-t/lib/Nullable/unwrapOrElseAsync
  • option-t/lib/Nullable/xor
  • option-t/lib/Option
  • option-t/lib/PlainOption
  • option-t/lib/PlainOption/Option
  • option-t/lib/PlainOption/and
  • option-t/lib/PlainOption/andThen
  • option-t/lib/PlainOption/andThenAsync
  • option-t/lib/PlainOption/asMut
  • option-t/lib/PlainOption/drop
  • option-t/lib/PlainOption/equal
  • option-t/lib/PlainOption/expect
  • option-t/lib/PlainOption/filter
  • option-t/lib/PlainOption/flatten
  • option-t/lib/PlainOption/index
  • option-t/lib/PlainOption/inspect
  • option-t/lib/PlainOption/map
  • option-t/lib/PlainOption/mapAsync
  • option-t/lib/PlainOption/mapOr
  • option-t/lib/PlainOption/mapOrAsync
  • option-t/lib/PlainOption/mapOrElse
  • option-t/lib/PlainOption/mapOrElseAsync
  • option-t/lib/PlainOption/okOr
  • option-t/lib/PlainOption/okOrElse
  • option-t/lib/PlainOption/or
  • option-t/lib/PlainOption/orElse
  • option-t/lib/PlainOption/orElseAsync
  • option-t/lib/PlainOption/toNullable
  • option-t/lib/PlainOption/toUndefinable
  • option-t/lib/PlainOption/transpose
  • option-t/lib/PlainOption/unwrap
  • option-t/lib/PlainOption/unwrapOr
  • option-t/lib/PlainOption/unwrapOrElse
  • option-t/lib/PlainOption/unwrapOrElseAsync
  • option-t/lib/PlainOption/xor
  • option-t/lib/PlainResult
  • option-t/lib/PlainResult/Result
  • option-t/lib/PlainResult/and
  • option-t/lib/PlainResult/andThen
  • option-t/lib/PlainResult/andThenAsync
  • option-t/lib/PlainResult/asMut
  • option-t/lib/PlainResult/drop
  • option-t/lib/PlainResult/equal
  • option-t/lib/PlainResult/expect
  • option-t/lib/PlainResult/flatten
  • option-t/lib/PlainResult/index
  • option-t/lib/PlainResult/inspect
  • option-t/lib/PlainResult/map
  • option-t/lib/PlainResult/mapAsync
  • option-t/lib/PlainResult/mapErr
  • option-t/lib/PlainResult/mapErrAsync
  • option-t/lib/PlainResult/mapOr
  • option-t/lib/PlainResult/mapOrAsync
  • option-t/lib/PlainResult/mapOrElse
  • option-t/lib/PlainResult/mapOrElseAsync
  • option-t/lib/PlainResult/or
  • option-t/lib/PlainResult/orElse
  • option-t/lib/PlainResult/orElseAsync
  • option-t/lib/PlainResult/toOption
  • option-t/lib/PlainResult/transpose
  • option-t/lib/PlainResult/tryCatch
  • option-t/lib/PlainResult/tryCatchAsync
  • option-t/lib/PlainResult/unwrap
  • option-t/lib/PlainResult/unwrapOr
  • option-t/lib/PlainResult/unwrapOrElse
  • option-t/lib/PlainResult/unwrapOrElseAsync
  • option-t/lib/PlainResult/unwrapOrThrowError
  • option-t/lib/Result
  • option-t/lib/Undefinable
  • option-t/lib/Undefinable/ErrorMessage
  • option-t/lib/Undefinable/Undefinable
  • option-t/lib/Undefinable/and
  • option-t/lib/Undefinable/andThen
  • option-t/lib/Undefinable/andThenAsync
  • option-t/lib/Undefinable/expect
  • option-t/lib/Undefinable/index
  • option-t/lib/Undefinable/inspect
  • option-t/lib/Undefinable/map
  • option-t/lib/Undefinable/mapAsync
  • option-t/lib/Undefinable/mapOr
  • option-t/lib/Undefinable/mapOrAsync
  • option-t/lib/Undefinable/mapOrElse
  • option-t/lib/Undefinable/mapOrElseAsync
  • option-t/lib/Undefinable/or
  • option-t/lib/Undefinable/orElse
  • option-t/lib/Undefinable/orElseAsync
  • option-t/lib/Undefinable/toNullable
  • option-t/lib/Undefinable/unwrap
  • option-t/lib/Undefinable/unwrapOr
  • option-t/lib/Undefinable/unwrapOrElse
  • option-t/lib/Undefinable/unwrapOrElseAsync
  • option-t/lib/Undefinable/xor
  • option-t/lib/index

Readme

option-t

npm CI Status (GitHub Actions)

  • This library provides a toolkit for nullable types in ECMAScript.
  • APIs are inspired by Rust Language's Option<T> and Result<T, E>.
  • This library helps to sort the "nullable" convention in your project.
  • TypeScript friendly APIs.
    • We recommend to use this with some static type systems like TypeScript.
  • Zero dependency.
  • Tree shakable completely.
  • ES Module fully compatbile.
    • Support Node.js' ES Module.
    • Of course, we provides CommonJS too.

Motivation

This library provides these conventions for your project:

  1. Uniform an expression of "none" value in JavaScript.
  2. Uniform a way to carry error information instead of throwing an error by result type.
  3. Provide various utility functions to handle 1 and 2 easily.

And Rust's std::option and std::result are suggestive to achieve these conventions in practice. Thus this package is inspired by their design.

Uniform the expression of "none" value.

In JavaScript world, there are many ways to express "there is no value". At least in ECMA262, There are some ways to represent them:

  • undefined (e.g. Map.prototype.get())
  • null (e.g. RegExp.prototype.exec())
  • -1 (e.g. String.prototype.indexOf())

In addition, ECMA262 interacts with DOM binding, Node.js standard modules, and others. There are additional various ways to represent "none" value.

In practice, we write some glue code to tame their various ways in our project to uniform their expression style. This library contributes to uniform the convention to write it.

Uniform the way to carry error information instead of throwing an error.

Exception is useful but it has some terrible aspects. It's easy that try-catch statement be a jump instruction by large scoped try-catch statement. It's hard to find where to throw an error, it's also hard to handle a penetrated exception from a lower layer. Especially, exception mechanism mis-matches with an async programming model. ECMA262 7th' async-await relaxes the problem about an exception with async programming, but there is still the problem about exceptions in traditional synchronous programming. Furthermore, if you interact with setTimeout() and other async APIs built with callback style on event loop, this problem faces you.

And some async-push based paradigm like Rx.Observable<T> does not allow throw any exceptions in their Observable stream. If you throw an error in it, only catch() operator can catch the error. But a programmer would sometimes forget to use its operator. This means that throwing an Error in Rx's Observable is pretty mis-matched action. Promise also has a similar problem.

And exception in ECMA262 is not friendly with static typing model because ECMA262's throw can throw not only Error but also other object types.

In Rust which is a programming language designed for parallel and seftiness, it treats errors in two category:

Rust groups errors into two major categories: recoverable and unrecoverable errors. For a recoverable error, such as a file not found error, it’s reasonable to report the problem to the user and retry the operation. Unrecoverable errors are always symptoms of bugs, like trying to access a location beyond the end of an array.

This categorization is pretty useful to relax the problem about exception in ECMA262 which this section described.

Thus this library provides a way to express recoverable error and also recommends to use throwing an error only if you intend to throw an unrecoverable error. This categorization introduces a convenient convention for you:

  • If the code uses throw, you should be careful about unrecoverable error.
  • If the code returns Result<T, E> provided this library, then you should handle it correctly.

This convention is clear as error handling style and it's static typing friendly by generics.

Provide a utility function to handle these uniformed expression easily.

Some static type checking tools also provide a way to check nullability and provide these conventions.

Flowtype and TypeScript checks with their control flow analysis (Sorry, I'm not sure about the details of Google Closure Compiler's behavior).

However, these compilers do not provide a way to handle their value easily like map or flatMap operations.

Rust's std::option and std::result have some utilities operation method to handle them easily. This library also provides a convenient way to handle them and its way is inspired by Rust's ones.

Installation

npm install --save option-t
// or
yarn add option-t --save

Usage & APIs

All APIs are TypeScript ready.

Utility functions for some types.

These are designed for more tree shaking friendly and more usable for JavaScript common world.

We recommend to use these in almost case.

Nullable<T> (T | null)

This can express a value of T type or null.

Undefinable<T> (T | undefined)

This can express a value of T type or undefined.

Maybe<T> (T | null | undefined)

This can express a value of T type, null, or undefined.

Option<T> ({ ok: true; val: T } | { ok: false; })

This can express that there is some values or none as a plain object. This does not have any property method on its prototype. But this allows no including unused methods of them.

Result<T, E> ({ ok: true; val: T } | { ok: false; err: E; })

This can express that there is some values or some error information as a plain object. This does not have any property method on its prototype. But this allows no including unused methods of them.

Wrapper objects (deprecated)

See this guide.

How to import

You can use these paths in both of CommonJS style and ES Module style.

This package provides some sub directories to import various functions (e.g. option-t/PlainResult). Each of them includes the same directory hierarchy with under src/.

If your toolchain does not support exports field in package.json...

We provides some backward compatible styles. They are deprecated but we're no plan to drop them.

These styles are kept for backward compatibility. You should switch to option-t/BarFoo style path.

Case: Your project is still use TypeScript compiler which lacks to support moduleResolution=node16.

Use option-t/lib/**.

This directory provides both of an ES Module and a CommonJS style module by conditional exports and host an actual d.ts file for legacy TypeScript compiler.

This is a most easy path for migrations (e.g. switch to option-t/BarFoo style, or switch to ES Module from CommonJS).

Case: Your project uses a classic bundler which does not support exports field.

you can use these paths:

  • option-t/cjs/** (Deprecated)
    • This directory provides only commonjs style modules.
  • option-t/esm/** (Deprecated)
    • This directory privides only ES Modules.

Idioms

  • You can see some idioms of this library for the interoperability to JavaScript world.

See also

These documents would provide more information about Option<T> and Result<T, E>. These are written for Rust, but the essence is just same.

License

MIT License

Contribution

  • Use yarn to install dev-dependency toolchains.