ts-data-forge
    Preparing search index...
    • Applies a function returning a TernaryResult to the Ok variant.

      Type Parameters

      • R extends UnknownTernaryResult
      • S2
      • W2
      • E2

      Parameters

      Returns TernaryResult<S2, E2 | UnwrapErr<R>, W2 | UnwrapWarn<R>>

      const parse = (value: string): TernaryResult<number, string, string> =>
      Number.isNaN(Number(value))
      ? TernaryResult.err('NaN')
      : TernaryResult.ok(Number(value));

      const doubled = TernaryResult.flatMap(TernaryResult.ok('3'), (text) =>
      TernaryResult.map(parse(text), (num) => num * 2),
      );

      const warnPassthrough = TernaryResult.flatMap(
      TernaryResult.warn('3', 'retry'),
      parse,
      );

      const errPassthrough = TernaryResult.flatMap(TernaryResult.err('oops'), parse);

      assert.deepStrictEqual(doubled, TernaryResult.ok(6));

      assert.deepStrictEqual(warnPassthrough, TernaryResult.warn(3, 'retry'));

      assert.deepStrictEqual(errPassthrough, TernaryResult.err('oops'));
    • Applies a function returning a TernaryResult to the Ok variant.

      Type Parameters

      • S
      • S2
      • W2
      • E2

      Parameters

      • flatMapFn: (value: S) => TernaryResult<S2, E2, W2>

      Returns <W, E>(result: TernaryResult<S, E, W>) => TernaryResult<S2, E2 | E, W2 | W>

      const parse = (value: string): TernaryResult<number, string, string> =>
      Number.isNaN(Number(value))
      ? TernaryResult.err('NaN')
      : TernaryResult.ok(Number(value));

      const doubled = TernaryResult.flatMap(TernaryResult.ok('3'), (text) =>
      TernaryResult.map(parse(text), (num) => num * 2),
      );

      const warnPassthrough = TernaryResult.flatMap(
      TernaryResult.warn('3', 'retry'),
      parse,
      );

      const errPassthrough = TernaryResult.flatMap(TernaryResult.err('oops'), parse);

      assert.deepStrictEqual(doubled, TernaryResult.ok(6));

      assert.deepStrictEqual(warnPassthrough, TernaryResult.warn(3, 'retry'));

      assert.deepStrictEqual(errPassthrough, TernaryResult.err('oops'));