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