UNPKG

5.06 kBTypeScriptView Raw
1/**
2 * **This module is experimental**
3 *
4 * Experimental features are published in order to get early feedback from the community, see these tracking
5 * [issues](https://github.com/gcanti/io-ts/issues?q=label%3Av2.2+) for further discussions and enhancements.
6 *
7 * A feature tagged as _Experimental_ is in a high state of flux, you're at risk of it changing without notice.
8 *
9 * @since 2.2.0
10 */
11import { Refinement } from 'fp-ts/lib/function'
12import { Literal, Schemable1, WithRefine1, WithUnion1, WithUnknownContainers1 } from './Schemable'
13/**
14 * @category model
15 * @since 2.2.8
16 */
17export interface Guard<I, A extends I> {
18 is: (i: I) => i is A
19}
20/**
21 * @since 2.2.2
22 */
23export declare type TypeOf<G> = G extends Guard<any, infer A> ? A : never
24/**
25 * @since 2.2.8
26 */
27export declare type InputOf<G> = G extends Guard<infer I, any> ? I : never
28/**
29 * @category constructors
30 * @since 2.2.0
31 */
32export declare const literal: <A extends readonly [Literal, ...Literal[]]>(...values: A) => Guard<unknown, A[number]>
33/**
34 * @category primitives
35 * @since 2.2.0
36 */
37export declare const string: Guard<unknown, string>
38/**
39 * Note: `NaN` is excluded.
40 *
41 * @category primitives
42 * @since 2.2.0
43 */
44export declare const number: Guard<unknown, number>
45/**
46 * @category primitives
47 * @since 2.2.0
48 */
49export declare const boolean: Guard<unknown, boolean>
50/**
51 * @category primitives
52 * @since 2.2.0
53 */
54export declare const UnknownArray: Guard<unknown, Array<unknown>>
55/**
56 * @category primitives
57 * @since 2.2.0
58 */
59export declare const UnknownRecord: Guard<unknown, Record<string, unknown>>
60/**
61 * @category combinators
62 * @since 2.2.0
63 */
64export declare const refine: <I, A extends I, B extends A>(
65 refinement: Refinement<A, B>
66) => (from: Guard<I, A>) => Guard<I, B>
67/**
68 * @category combinators
69 * @since 2.2.0
70 */
71export declare const nullable: <I, A extends I>(or: Guard<I, A>) => Guard<I | null, A | null>
72/**
73 * @category combinators
74 * @since 2.2.15
75 */
76export declare const struct: <A>(
77 properties: { [K in keyof A]: Guard<unknown, A[K]> }
78) => Guard<unknown, { [K_1 in keyof A]: A[K_1] }>
79/**
80 * Use `struct` instead.
81 *
82 * @category combinators
83 * @since 2.2.0
84 * @deprecated
85 */
86export declare const type: <A>(
87 properties: { [K in keyof A]: Guard<unknown, A[K]> }
88) => Guard<unknown, { [K_1 in keyof A]: A[K_1] }>
89/**
90 * @category combinators
91 * @since 2.2.0
92 */
93export declare const partial: <A>(
94 properties: { [K in keyof A]: Guard<unknown, A[K]> }
95) => Guard<unknown, Partial<{ [K_1 in keyof A]: A[K_1] }>>
96/**
97 * @category combinators
98 * @since 2.2.0
99 */
100export declare const array: <A>(item: Guard<unknown, A>) => Guard<unknown, A[]>
101/**
102 * @category combinators
103 * @since 2.2.0
104 */
105export declare const record: <A>(codomain: Guard<unknown, A>) => Guard<unknown, Record<string, A>>
106/**
107 * @category combinators
108 * @since 2.2.0
109 */
110export declare const tuple: <A extends readonly unknown[]>(
111 ...components: { [K in keyof A]: Guard<unknown, A[K]> }
112) => Guard<unknown, A>
113/**
114 * @category combinators
115 * @since 2.2.0
116 */
117export declare const intersect: <B>(right: Guard<unknown, B>) => <A>(left: Guard<unknown, A>) => Guard<unknown, A & B>
118/**
119 * @category combinators
120 * @since 2.2.0
121 */
122export declare const union: <A extends readonly [unknown, ...unknown[]]>(
123 ...members: { [K in keyof A]: Guard<unknown, A[K]> }
124) => Guard<unknown, A[number]>
125/**
126 * @category combinators
127 * @since 2.2.0
128 */
129export declare const sum: <T extends string>(
130 tag: T
131) => <A>(members: { [K in keyof A]: Guard<unknown, A[K] & Record<T, K>> }) => Guard<unknown, A[keyof A]>
132/**
133 * @category combinators
134 * @since 2.2.0
135 */
136export declare const lazy: <A>(f: () => Guard<unknown, A>) => Guard<unknown, A>
137/**
138 * @category combinators
139 * @since 2.2.15
140 */
141export declare const readonly: <I, A extends I>(guard: Guard<I, A>) => Guard<I, Readonly<A>>
142/**
143 * @category combinators
144 * @since 2.2.8
145 */
146export declare const alt: <I, A extends I>(that: () => Guard<I, A>) => (me: Guard<I, A>) => Guard<I, A>
147/**
148 * @category combinators
149 * @since 2.2.8
150 */
151export declare const zero: <I, A extends I>() => Guard<I, A>
152/**
153 * @category combinators
154 * @since 2.2.8
155 */
156export declare const compose: <I, A extends I, B extends A>(to: Guard<A, B>) => (from: Guard<I, A>) => Guard<I, B>
157/**
158 * @category combinators
159 * @since 2.2.8
160 */
161export declare const id: <A>() => Guard<A, A>
162/**
163 * @category instances
164 * @since 2.2.0
165 */
166export declare const URI = 'io-ts/Guard'
167/**
168 * @category instances
169 * @since 2.2.0
170 */
171export declare type URI = typeof URI
172declare module 'fp-ts/lib/HKT' {
173 interface URItoKind<A> {
174 readonly [URI]: Guard<unknown, A>
175 }
176}
177/**
178 * @category instances
179 * @since 2.2.8
180 */
181export declare const Schemable: Schemable1<URI>
182/**
183 * @category instances
184 * @since 2.2.8
185 */
186export declare const WithUnknownContainers: WithUnknownContainers1<URI>
187/**
188 * @category instances
189 * @since 2.2.8
190 */
191export declare const WithUnion: WithUnion1<URI>
192/**
193 * @category instances
194 * @since 2.2.8
195 */
196export declare const WithRefine: WithRefine1<URI>