Skip to content

otherwise

otherwise() closes a pattern matching pipeline by providing a fallback value for all remaining cases. It automatically unwraps PatternResult returned by match/when and gives you back the final value.

Interactive example

Syntax

Classic signature

typescript
function otherwise<
	GenericInput extends AnyValue, 
	GenericInputValue extends Exclude<GenericInput, PatternResult>, 
	GenericInputPatternResult extends Extract<GenericInput, PatternResult>, 
	GenericOutput extends AnyValue
>(
	input: GenericInput | GenericInputPatternResult | GenericInputValue, 
	theFunction: (rest: GenericInputValue) => GenericOutput
): (GenericOutput | Unwrap<GenericInputPatternResult>);

Curried signature

typescript
function otherwise<
	GenericInput extends AnyValue, 
	GenericInputValue extends Exclude<GenericInput, PatternResult>, 
	GenericInputPatternResult extends Extract<GenericInput, PatternResult>, 
	GenericOutput extends AnyValue
>(
	theFunction: (rest: GenericInputValue) => GenericOutput
): (
	input: GenericInput | GenericInputPatternResult | GenericInputValue
) => (GenericOutput | Unwrap<GenericInputPatternResult>);

The type received in rest corresponds to the cases that have not yet been covered by your previous match/when.

Parameters

  • input (optional): value to close immediately (often the result of a when or a match).
  • theFunction: fallback executed for the remaining cases. Can return any type (sync or async).

Return value

The value returned by theFunction if no pattern matched, otherwise that of the already present PatternResult. After otherwise, you no longer obtain a PatternResult but a “normal” value.

Best practices

  • Use otherwise to end a pipeline when a fallback is sufficient. If you need to guarantee strict exhaustiveness, prefer exhaustive.
  • The rest parameter is already typed with the remaining cases. Use it to handle its fields without casts.
  • You can re-inject the value anytime into a new pipe, Either, etc. since it is unwrapped.

See also

Released under the MIT license.