UNPKG

@benev/slate

Version:
37 lines (36 loc) 1.3 kB
export declare namespace Op { type Status = "loading" | "error" | "ready"; type Loading = { status: "loading"; }; type Error = { status: "error"; reason: string; }; type Ready<X> = { status: "ready"; payload: X; }; type For<X> = Loading | Error | Ready<X>; type Setter<X> = (op: For<X>) => void; type Payload<O> = O extends Op.Ready<infer X> ? X : never; const loading: <X>() => For<X>; const error: <X>(reason: string) => For<X>; const ready: <X>(payload: X) => For<X>; const is: Readonly<{ loading: (op: For<any>) => op is Op.Loading; error: (op: For<any>) => op is Op.Error; ready: <X>(op: For<X>) => op is Op.Ready<X>; }>; function payload<X>(op: For<X>): X | undefined; function reason<X>(op: For<X>): string | undefined; type Choices<X, R> = { loading: () => R; error: (reason: string) => R; ready: (payload: X) => R; }; function select<X, R>(op: For<X>, choices: Choices<X, R>): R; function load<X>(set_op: Setter<X>, operation: () => Promise<X>): Promise<X>; function morph<A, B>(op: For<A>, transmute: (a: A) => B): For<B>; function all<O extends For<any>[]>(...ops: O): For<{ [K in keyof O]: Payload<O[K]>; }>; }