UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

25 lines (21 loc) • 896 B
import type { None, Option, Some } from "."; import type { Args, GenericFn, GenericResolver } from ".."; /** * Flatten an {@link Option} of an {@link Option} into an {@link Option}. * * Sig: `<T>(o: Option<Option<T>>) => Option<T>` */ export type Flatten<O extends Option<Option<unknown>>> = O extends Some<infer O extends Option<unknown>> ? O : None; interface Resolver extends GenericResolver<[Option<Option<unknown>>], Option<unknown>> { on1: ([o]: Args<this>) => [[], typeof o extends Option<Option<infer T>> ? Option<T> : never]; on_r: ([, r]: Args<this>) => [Option<Option<typeof r extends Option<infer T> ? T : never>>]; } /** * [Fn] Flatten an {@link Option} of an {@link Option} into an {@link Option}. * * Sig: `<T>(o: Option<Option<T>>) => Option<T>` */ export default interface FlattenFn extends GenericFn<Resolver> { def: ([o]: Args<this>) => Flatten<typeof o>; }