rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
28 lines (24 loc) • 883 B
TypeScript
import type { Option, Some } from ".";
import type { Args, GenericFn, GenericResolver } from "../HKT";
import type { AssertUnknown } from "../helpers";
/**
* Get the inner value of an {@link Option} if it is {@link Some}, otherwise return `never`.
*
* Type safety is **not guaranteed**.
*
* Sig: `<T>(o: Option<T>) => T`
*/
export type Unwrap<O extends Option<unknown>> = AssertUnknown<O extends Some<infer T> ? T : never>;
interface Resolver extends GenericResolver<[Option<unknown>], unknown> {
on1: ([o]: Args<this>) => [[], typeof o extends Option<infer T> ? T : never];
}
/**
* [Fn] Get the inner value of an {@link Option} if it is {@link Some}, otherwise return `never`.
*
* Type safety is **not guaranteed**.
*
* Sig: `<T>(o: Option<T>) => T`
*/
export default interface UnwrapFn extends GenericFn<Resolver> {
def: ([o]: Args<this>) => Unwrap<typeof o>;
}