Skip to main content

cases

cases() function

Returns a mapped value based on the first matching predicate. The predicates can return boolean or be type refinements.

If the predicate is a type refinement, the corresponding mapper will receive the narrowed type. Else, the mapper will receive the original type. If there's no match, the input value is returned as is. (if the number of functions is even) Or the default function (the last function without paired predicate) is executed if provided. (if the number of functions is odd)

Signature:

declare function cases(): (value: unknown) => typeof value;

Returns:

(value: unknown) => typeof value

Example 1

pipe(
[10, 20, 30],
map(cases(
lt(15), (n) => n + 20,
lt(25), (n) => n + 10,
)),
toArray,
) // [30, 30, 30]

Example 2

with type refinement

type A = { a: string; }
type B = A & { b: string; }

pipe(
[{ a: "A", b: "B" }, { a: "A" }] as A[],
map(cases(
(n): n is B => "b" in n, (n) => n.b,
(n) => n.a,
)),
toArray,
) // ["B", "A"]

Open Source Code