Skip to content
ghaerdi edited this page Aug 14, 2026 · 2 revisions

Result<T, E>

Result<T, E> is a discriminated union of Ok<T> and Err<E> — narrow with isOk() / isErr() (or the match() patterns Result.ok / Result.err, which hand the unwrapped value or error to the handler).

Checking

  • isOk(): Returns true if Ok.
  • isErr(): Returns true if Err.
  • isOkAnd(fn): Returns true if Ok and the value satisfies fn.
  • isErrAnd(fn): Returns true if Err and the error satisfies fn.
  • contains(value): Returns true if Ok and the value equals value.

Extracting Values

  • ok(): Returns the Ok value as Some(value) or None.
  • err(): Returns the Err value as Some(error) or None.
  • unwrap(): Returns the Ok value, throws if Err. Use with caution.
  • unwrapErr(): Returns the Err value, throws if Ok.
  • expect(message): Returns Ok value, throws message if Err.
  • expectErr(message): Returns Err value, throws message if Ok.
  • unwrapOr(defaultValue): Returns Ok value or defaultValue if Err.
  • unwrapOrElse(fn): Returns Ok value or computes default using fn(errorValue) if Err.
  • unwrapOrDefault(): Returns Ok value or throws (no Default trait in TypeScript).

Mapping & Transformation

  • map(fn): Maps Ok<T> to Ok<U>. Leaves Err untouched.
  • mapErr(fn): Maps Err<E> to Err<F>. Leaves Ok untouched.
  • mapOr(defaultValue, fn): Applies fn to Ok value, returns defaultValue if Err.
  • mapOrElse(defaultFn, fn): Applies fn to Ok value, applies defaultFn to Err value.
  • mapOrDefault(defaultValue, fn): Applies fn to Ok value, returns defaultValue if Err.

Chaining & Side Effects

  • and(res): Returns res if Ok, else returns self (Err).
  • andThen(fn): Calls fn(okValue) if Ok, returns the resulting Result.
  • or(res): Returns res if Err, else returns self (Ok).
  • orElse(fn): Calls fn(errValue) if Err, returns the resulting Result.
  • inspect(fn): Calls fn(okValue) if Ok, returns original Result.
  • inspectErr(fn): Calls fn(errValue) if Err, returns original Result.

Flattening & Transposing

  • flatten(): Converts Result<Result<T, E>, E> to Result<T, E>.
  • transpose(): Transposes Result<Option<T>, E> into Option<Result<T, E>>.

Pattern Matching

  • match(matcher): Executes matcher.Ok(value) or matcher.Err(error), returning the result.

Cloning

  • cloned(): Returns a new Result with a deep clone of the Ok value (using structuredClone). Err values are not cloned.

Destructuring

  • asTuple(): Returns [undefined, T] for Ok or [E, undefined] for Err.
  • asObject(): Returns { error: undefined, value: T } for Ok or { error: E, value: undefined } for Err.

Iteration

  • iter(): Returns an iterator that yields the Ok value once, or nothing if Err.
  • [Symbol.iterator](): Iterator protocol — yields the Ok value if it is iterable.

Static Methods on Result

  • Result.from(fn, errorTransform?): Wraps a sync function that might throw. Returns Ok(result) or Err(error).
  • Result.fromAsync(fn, errorTransform?): Wraps an async function returning a Promise. Returns Promise<Result>.
  • Result.isResult(value): Type guard, returns true if value is Ok or Err.

See Also

Clone this wiki locally