UNPKG

3.82 kBTypeScriptView Raw
1/**
2 * @since 2.2.0
3 */
4import { Kind, URIS, HKT } from 'fp-ts/es6/HKT';
5/**
6 * @since 2.2.0
7 */
8export declare type Literal = string | number | boolean | null;
9/**
10 * @since 2.2.3
11 */
12export interface Schemable<S> {
13 readonly URI: S;
14 readonly literal: <A extends ReadonlyArray<Literal>>(...values: A) => HKT<S, A[number]>;
15 readonly string: HKT<S, string>;
16 readonly number: HKT<S, number>;
17 readonly boolean: HKT<S, boolean>;
18 readonly nullable: <A>(or: HKT<S, A>) => HKT<S, null | A>;
19 readonly type: <A>(properties: {
20 [K in keyof A]: HKT<S, A[K]>;
21 }) => HKT<S, {
22 [K in keyof A]: A[K];
23 }>;
24 readonly partial: <A>(properties: {
25 [K in keyof A]: HKT<S, A[K]>;
26 }) => HKT<S, Partial<{
27 [K in keyof A]: A[K];
28 }>>;
29 readonly record: <A>(codomain: HKT<S, A>) => HKT<S, Record<string, A>>;
30 readonly array: <A>(items: HKT<S, A>) => HKT<S, Array<A>>;
31 readonly tuple: <A extends ReadonlyArray<unknown>>(...components: {
32 [K in keyof A]: HKT<S, A[K]>;
33 }) => HKT<S, A>;
34 readonly intersection: <A, B>(left: HKT<S, A>, right: HKT<S, B>) => HKT<S, A & B>;
35 readonly sum: <T extends string>(tag: T) => <A>(members: {
36 [K in keyof A]: HKT<S, A[K]>;
37 }) => HKT<S, A[keyof A]>;
38 readonly lazy: <A>(id: string, f: () => HKT<S, A>) => HKT<S, A>;
39}
40/**
41 * @since 2.2.3
42 */
43export interface Schemable1<S extends URIS> {
44 readonly URI: S;
45 readonly literal: <A extends ReadonlyArray<Literal>>(...values: A) => Kind<S, A[number]>;
46 readonly string: Kind<S, string>;
47 readonly number: Kind<S, number>;
48 readonly boolean: Kind<S, boolean>;
49 readonly nullable: <A>(or: Kind<S, A>) => Kind<S, null | A>;
50 readonly type: <A>(properties: {
51 [K in keyof A]: Kind<S, A[K]>;
52 }) => Kind<S, {
53 [K in keyof A]: A[K];
54 }>;
55 readonly partial: <A>(properties: {
56 [K in keyof A]: Kind<S, A[K]>;
57 }) => Kind<S, Partial<{
58 [K in keyof A]: A[K];
59 }>>;
60 readonly record: <A>(codomain: Kind<S, A>) => Kind<S, Record<string, A>>;
61 readonly array: <A>(items: Kind<S, A>) => Kind<S, Array<A>>;
62 readonly tuple: <A extends ReadonlyArray<unknown>>(...components: {
63 [K in keyof A]: Kind<S, A[K]>;
64 }) => Kind<S, A>;
65 readonly intersection: <A, B>(left: Kind<S, A>, right: Kind<S, B>) => Kind<S, A & B>;
66 readonly sum: <T extends string>(tag: T) => <A>(members: {
67 [K in keyof A]: Kind<S, A[K]>;
68 }) => Kind<S, A[keyof A]>;
69 readonly lazy: <A>(id: string, f: () => Kind<S, A>) => Kind<S, A>;
70}
71/**
72 * @since 2.2.3
73 */
74export interface WithUnknownContainers<S> {
75 readonly UnknownArray: HKT<S, Array<unknown>>;
76 readonly UnknownRecord: HKT<S, Record<string, unknown>>;
77}
78/**
79 * @since 2.2.3
80 */
81export interface WithUnknownContainers1<S extends URIS> {
82 readonly UnknownArray: Kind<S, Array<unknown>>;
83 readonly UnknownRecord: Kind<S, Record<string, unknown>>;
84}
85/**
86 * @since 2.2.3
87 */
88export interface WithUnion<S> {
89 readonly union: <A extends ReadonlyArray<unknown>>(...members: {
90 [K in keyof A]: HKT<S, A[K]>;
91 }) => HKT<S, A[number]>;
92}
93/**
94 * @since 2.2.3
95 */
96export interface WithUnion1<S extends URIS> {
97 readonly union: <A extends ReadonlyArray<unknown>>(...members: {
98 [K in keyof A]: Kind<S, A[K]>;
99 }) => Kind<S, A[number]>;
100}
101/**
102 * @since 2.2.3
103 */
104export interface WithRefinement<S> {
105 readonly refinement: <A, B extends A>(from: HKT<S, A>, refinement: (a: A) => a is B, expected: string) => HKT<S, B>;
106}
107/**
108 * @since 2.2.3
109 */
110export interface WithRefinement1<S extends URIS> {
111 readonly refinement: <A, B extends A>(from: Kind<S, A>, refinement: (a: A) => a is B, expected: string) => Kind<S, B>;
112}
113/**
114 * @since 2.2.0
115 */
116export declare function memoize<A, B>(f: (a: A) => B): (a: A) => B;