/** * **This module is experimental** * * Experimental features are published in order to get early feedback from the community, see these tracking * [issues](https://github.com/gcanti/io-ts/issues?q=label%3Av2.2+) for further discussions and enhancements. * * A feature tagged as _Experimental_ is in a high state of flux, you're at risk of it changing without notice. * * @since 2.2.0 */ import { Refinement } from 'fp-ts/es6/function' import { HKT, Kind, Kind2, URIS, URIS2 } from 'fp-ts/es6/HKT' /** * @since 2.2.0 */ export declare type Literal = string | number | boolean | null /** * @since 2.2.3 */ export interface Schemable { readonly URI: S readonly literal: ], L extends Literal = Literal>( ...values: A ) => HKT readonly string: HKT readonly number: HKT readonly boolean: HKT readonly nullable: (or: HKT) => HKT /** @deprecated */ readonly type: ( properties: { [K in keyof A]: HKT } ) => HKT< S, { [K in keyof A]: A[K] } > readonly struct: ( properties: { [K in keyof A]: HKT } ) => HKT< S, { [K in keyof A]: A[K] } > readonly partial: ( properties: { [K in keyof A]: HKT } ) => HKT< S, Partial< { [K in keyof A]: A[K] } > > readonly record: (codomain: HKT) => HKT> readonly array: (item: HKT) => HKT> readonly tuple: >( ...components: { [K in keyof A]: HKT } ) => HKT readonly intersect: (right: HKT) => (left: HKT) => HKT readonly sum: ( tag: T ) => ( members: { [K in keyof A]: HKT> } ) => HKT readonly lazy: (id: string, f: () => HKT) => HKT readonly readonly: (sa: HKT) => HKT> } /** * @since 2.2.3 */ export interface Schemable1 { readonly URI: S readonly literal: ], L extends Literal = Literal>( ...values: A ) => Kind readonly string: Kind readonly number: Kind readonly boolean: Kind readonly nullable: (or: Kind) => Kind /** @deprecated */ readonly type: ( properties: { [K in keyof A]: Kind } ) => Kind< S, { [K in keyof A]: A[K] } > readonly struct: ( properties: { [K in keyof A]: Kind } ) => Kind< S, { [K in keyof A]: A[K] } > readonly partial: ( properties: { [K in keyof A]: Kind } ) => Kind< S, Partial< { [K in keyof A]: A[K] } > > readonly record: (codomain: Kind) => Kind> readonly array: (item: Kind) => Kind> readonly tuple: >( ...components: { [K in keyof A]: Kind } ) => Kind readonly intersect: (right: Kind) => (left: Kind) => Kind readonly sum: ( tag: T ) => ( members: { [K in keyof A]: Kind> } ) => Kind readonly lazy: (id: string, f: () => Kind) => Kind readonly readonly: (sa: Kind) => Kind> } /** * @since 2.2.8 */ export interface Schemable2C { readonly URI: S readonly literal: ], L extends Literal = Literal>( ...values: A ) => Kind2 readonly string: Kind2 readonly number: Kind2 readonly boolean: Kind2 readonly nullable: (or: Kind2) => Kind2 /** @deprecated */ readonly type: ( properties: { [K in keyof A]: Kind2 } ) => Kind2< S, E, { [K in keyof A]: A[K] } > readonly struct: ( properties: { [K in keyof A]: Kind2 } ) => Kind2< S, E, { [K in keyof A]: A[K] } > readonly partial: ( properties: { [K in keyof A]: Kind2 } ) => Kind2< S, E, Partial< { [K in keyof A]: A[K] } > > readonly record: (codomain: Kind2) => Kind2> readonly array: (item: Kind2) => Kind2> readonly tuple: >( ...components: { [K in keyof A]: Kind2 } ) => Kind2 readonly intersect: (right: Kind2) => (left: Kind2) => Kind2 readonly sum: ( tag: T ) => ( members: { [K in keyof A]: Kind2> } ) => Kind2 readonly lazy: (id: string, f: () => Kind2) => Kind2 readonly readonly: (sa: Kind2) => Kind2> } /** * @since 2.2.3 */ export interface WithUnknownContainers { readonly UnknownArray: HKT> readonly UnknownRecord: HKT> } /** * @since 2.2.3 */ export interface WithUnknownContainers1 { readonly UnknownArray: Kind> readonly UnknownRecord: Kind> } /** * @since 2.2.8 */ export interface WithUnknownContainers2C { readonly UnknownArray: Kind2> readonly UnknownRecord: Kind2> } /** * @since 2.2.3 */ export interface WithUnion { readonly union: ]>( ...members: { [K in keyof A]: HKT } ) => HKT } /** * @since 2.2.3 */ export interface WithUnion1 { readonly union: ]>( ...members: { [K in keyof A]: Kind } ) => Kind } /** * @since 2.2.8 */ export interface WithUnion2C { readonly union: ]>( ...members: { [K in keyof A]: Kind2 } ) => Kind2 } /** * @since 2.2.3 */ export interface WithRefine { readonly refine: (refinement: Refinement, id: string) => (from: HKT) => HKT } /** * @since 2.2.3 */ export interface WithRefine1 { readonly refine: (refinement: Refinement, id: string) => (from: Kind) => Kind } /** * @since 2.2.8 */ export interface WithRefine2C { readonly refine: ( refinement: Refinement, id: string ) => (from: Kind2) => Kind2 } /** * @since 2.2.0 */ export declare function memoize(f: (a: A) => B): (a: A) => B