UNPKG

rivo

Version:

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

44 lines (40 loc) • 1.28 kB
import type { Args, GenericFn, GenericResolver } from "../HKT"; import type { Eq, IsPropertyKeyLiteral } from "../helpers"; /** * Pick properties from an object. * * Sig: `<K extends keyof O, O>(k: K, o: O) => object` */ type Pick_<K extends keyof O, O> = Pick<O, K>; export type { Pick_ as Pick }; interface Resolver extends GenericResolver<[PropertyKey, object], object> { on1_: ([k]: Args<this>) => [ [{ readonly [P in typeof k]: any }], { readonly [P in typeof k]: unknown }, ]; on_1: ([, o]: Args<this>) => [[keyof typeof o], object]; on11: ([k, o]: Args<this>) => [ [], IsPropertyKeyLiteral<typeof k> extends true ? { [P in keyof typeof o as P extends typeof k ? P : never]: (typeof o)[P] } extends infer R ? Eq<R, typeof o> extends true ? typeof o : R : never : { readonly [P in typeof k]: (typeof o)[keyof typeof o] } extends infer R ? Eq<R, typeof o> extends true ? typeof o : R : never, ]; } /** * [Fn] Pick properties from an object. * * Sig: `<K extends keyof O, O>(k: K, o: O) => object` */ export default interface PickFn extends GenericFn<Resolver> { def: ([k, o]: Args<this>) => { [P in keyof typeof o as P extends typeof k ? P : never]: (typeof o)[P]; }; }