Idiomatic Implementation of Option Handling in TypeScript Function

What'd be an idiomatic effect way of writing this function fn?

function fn(a: Option.Option<string>, b: Option.Option<boolean>): Option.Option<void> {
  if (Option.isSome(a) && Option.isSome(b)) {
    return Option.some(both(Option.getOrThrow(a), Option.getOrThrow(b)));
  }
  if (Option.isSome(a)) {
    return Option.some(onlyStr(Option.getOrThrow(a)));
  }
  if (Option.isSome(b)) {
    return Option.some(onlyBool(Option.getOrThrow(b)));
  }
  return Option.none();
}

const both = (a:string, b:boolean) => console.log(a, b)
const onlyStr = (x:string) => console.log(x)
const onlyBool = (x:boolean) => console.log(x)
Was this page helpful?