UNPKG

rivo

Version:

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

31 lines (27 loc) • 1.13 kB
import type { Option, Some } from "."; import type { Args, GenericFn, GenericResolver } from "../HKT"; import type { AssertUnknown, Broaden } from "../helpers"; /** * Get the inner value of an {@link Option} if it is {@link Some}, otherwise return `Default`. * * Sig: `<T>(default: T, o: Option<T>) => T` */ export type UnwrapOr<Default, O extends Option<unknown>> = AssertUnknown< O extends Some<infer T> ? T : Default >; interface Resolver extends GenericResolver<[unknown, Option<unknown>], unknown> { on1_: ([d]: Args<this>) => [[Option<Broaden<typeof d>>], Broaden<typeof d>]; on_1: ([, o]: Args<this>) => [ [Option<typeof o extends Option<infer T> ? T : never>], typeof o extends Option<infer T> ? T : never, ]; on11: ([d, o]: Args<this>) => [[], (typeof o extends Option<infer T> ? T : never) | typeof d]; } /** * [Fn] Get the inner value of an {@link Option} if it is {@link Some}, otherwise return `default`. * * Sig: `<T>(default: T, o: Option<T>) => T` */ export default interface UnwrapOrFn extends GenericFn<Resolver> { def: ([d, o]: Args<this>) => UnwrapOr<typeof d, typeof o>; }