Comparing version 1.5.2 to 1.5.3
@@ -17,2 +17,46 @@ # Changelog | ||
# 1.5.3 | ||
- **Bug Fix** | ||
- missing context info while decoding an intersection, fix #246 (@gcanti) | ||
- **Experimental** | ||
- add intermediary interfaces, closes #165 (@gcanti) | ||
- `NullC` | ||
- `UndefinedC` | ||
- `VoidC` | ||
- `AnyC` | ||
- `UnknownC` | ||
- `NeverC` | ||
- `StringC` | ||
- `NumberC` | ||
- `BooleanC` | ||
- `UnknownArrayC` | ||
- `UnknownRecordC` | ||
- `ObjectC` | ||
- `FunctionC` | ||
- `RefinementC` | ||
- `LiteralC` | ||
- `KeyofC` | ||
- `ArrayC` | ||
- `TypeC` | ||
- `PartialC` | ||
- `RecordC` | ||
- `UnionC` | ||
- `IntersectionC` | ||
- `TupleC` | ||
- `ReadonlyC` | ||
- `ReadonlyArrayC` | ||
- `StrictC` | ||
- `TaggedUnionC` | ||
- `ExactC` | ||
- **Polishs** | ||
- use rest elements in tuple types (`typescript@3.0.1` feature) (@gcanti) | ||
- `union` should handle zero types (@gcanti) | ||
- `intersection` should handle zero / one types (@gcanti) | ||
- **Deprecation** | ||
- deprecate `clean` (@gcanti) | ||
- deprecate `alias` (@gcanti) | ||
- deprecate `PropsOf` type (@gcanti) | ||
- deprecate `Exact` type (@gcanti) | ||
# 1.5.2 | ||
@@ -19,0 +63,0 @@ |
@@ -161,6 +161,11 @@ import { Either } from 'fp-ts/lib/Either'; | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface NullC extends NullType { | ||
} | ||
/** | ||
* @alias `null` | ||
* @since 1.0.0 | ||
*/ | ||
export declare const nullType: NullType; | ||
export declare const nullType: NullC; | ||
/** | ||
@@ -173,4 +178,9 @@ * @since 1.0.0 | ||
} | ||
declare const undefinedType: UndefinedType; | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface UndefinedC extends UndefinedType { | ||
} | ||
declare const undefinedType: UndefinedC; | ||
/** | ||
* @since 1.2.0 | ||
@@ -183,6 +193,11 @@ */ | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface VoidC extends VoidType { | ||
} | ||
/** | ||
* @alias `void` | ||
* @since 1.2.0 | ||
*/ | ||
export declare const voidType: VoidType; | ||
export declare const voidType: VoidC; | ||
/** | ||
@@ -196,5 +211,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface AnyC extends AnyType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const any: AnyType; | ||
export declare const any: AnyC; | ||
/** | ||
@@ -208,5 +228,10 @@ * @since 1.5.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface UnknownC extends UnknownType { | ||
} | ||
/** | ||
* @since 1.5.0 | ||
*/ | ||
export declare const unknown: UnknownType; | ||
export declare const unknown: UnknownC; | ||
/** | ||
@@ -220,5 +245,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface NeverC extends NeverType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const never: NeverType; | ||
export declare const never: NeverC; | ||
/** | ||
@@ -232,5 +262,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface StringC extends StringType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const string: StringType; | ||
export declare const string: StringC; | ||
/** | ||
@@ -244,5 +279,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface NumberC extends NumberType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const number: NumberType; | ||
export declare const number: NumberC; | ||
/** | ||
@@ -256,5 +296,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface BooleanC extends BooleanType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const boolean: BooleanType; | ||
export declare const boolean: BooleanC; | ||
/** | ||
@@ -267,4 +312,9 @@ * @since 1.0.0 | ||
} | ||
declare const arrayType: AnyArrayType; | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface UnknownArrayC extends AnyArrayType { | ||
} | ||
declare const arrayType: UnknownArrayC; | ||
/** | ||
* @since 1.0.0 | ||
@@ -279,5 +329,10 @@ */ | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface UnknownRecordC extends AnyDictionaryType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const Dictionary: AnyDictionaryType; | ||
export declare const Dictionary: UnknownRecordC; | ||
/** | ||
@@ -291,5 +346,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface ObjectC extends ObjectType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const object: ObjectType; | ||
export declare const object: ObjectC; | ||
/** | ||
@@ -303,5 +363,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface FunctionC extends FunctionType { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const Function: FunctionType; | ||
export declare const Function: FunctionC; | ||
/** | ||
@@ -317,13 +382,19 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface RefinementC<C extends Any> extends RefinementType<C, TypeOf<C>, OutputOf<C>, InputOf<C>> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const refinement: <RT extends Any>(type: RT, predicate: Predicate<RT["_A"]>, name?: string) => RefinementType<RT, RT["_A"], RT["_O"], RT["_I"]>; | ||
export declare const refinement: <RT extends Any>(type: RT, predicate: Predicate<RT["_A"]>, name?: string) => RefinementC<RT>; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const Integer: RefinementType<NumberType, number, number, unknown>; | ||
export declare const Integer: RefinementC<NumberC>; | ||
declare type LiteralValue = string | number | boolean; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare class LiteralType<V extends string | number | boolean> extends Type<V> { | ||
export declare class LiteralType<V extends LiteralValue> extends Type<V> { | ||
readonly value: V; | ||
@@ -334,5 +405,10 @@ readonly _tag: 'LiteralType'; | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface LiteralC<V extends LiteralValue> extends LiteralType<V> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const literal: <V extends string | number | boolean>(value: V, name?: string) => LiteralType<V>; | ||
export declare const literal: <V extends LiteralValue>(value: V, name?: string) => LiteralC<V>; | ||
/** | ||
@@ -349,2 +425,9 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface KeyofC<D extends { | ||
[key: string]: mixed; | ||
}> extends KeyofType<D> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
@@ -354,3 +437,3 @@ */ | ||
[key: string]: unknown; | ||
}>(keys: D, name?: string) => KeyofType<D>; | ||
}>(keys: D, name?: string) => KeyofC<D>; | ||
/** | ||
@@ -378,5 +461,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface ArrayC<C extends Mixed> extends ArrayType<C, Array<TypeOf<C>>, Array<OutputOf<C>>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const array: <RT extends Mixed>(type: RT, name?: string) => ArrayType<RT, RT["_A"][], RT["_O"][], unknown>; | ||
export declare const array: <RT extends Mixed>(type: RT, name?: string) => ArrayC<RT>; | ||
/** | ||
@@ -415,6 +503,11 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface TypeC<P extends Props> extends InterfaceType<P, TypeOfProps<P>, OutputOfProps<P>, unknown> { | ||
} | ||
/** | ||
* @alias `interface` | ||
* @since 1.0.0 | ||
*/ | ||
export declare const type: <P extends Props>(props: P, name?: string) => InterfaceType<P, TypeOfProps<P>, OutputOfProps<P>, unknown>; | ||
export declare const type: <P extends Props>(props: P, name?: string) => TypeC<P>; | ||
/** | ||
@@ -441,5 +534,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface PartialC<P extends Props> extends PartialType<P, TypeOfPartialProps<P>, OutputOfPartialProps<P>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const partial: <P extends Props>(props: P, name?: string) => PartialType<P, TypeOfPartialProps<P>, OutputOfPartialProps<P>, unknown>; | ||
export declare const partial: <P extends Props>(props: P, name?: string) => PartialC<P>; | ||
/** | ||
@@ -467,5 +565,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface RecordC<D extends Mixed, C extends Mixed> extends DictionaryType<D, C, TypeOfDictionary<D, C>, OutputOfDictionary<D, C>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const dictionary: <D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string) => DictionaryType<D, C, TypeOfDictionary<D, C>, OutputOfDictionary<D, C>, unknown>; | ||
export declare const dictionary: <D extends Mixed, C extends Mixed>(domain: D, codomain: C, name?: string) => RecordC<D, C>; | ||
/** | ||
@@ -480,5 +583,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface UnionC<CS extends [Mixed, Mixed, ...Array<Mixed>]> extends UnionType<CS, TypeOf<CS[number]>, OutputOf<CS[number]>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const union: <RTS extends Mixed[]>(types: RTS, name?: string) => UnionType<RTS, RTS[number]["_A"], RTS[number]["_O"], unknown>; | ||
export declare const union: <RTS extends [Mixed, Mixed, ...Mixed[]]>(types: RTS, name?: string) => UnionC<RTS>; | ||
/** | ||
@@ -501,9 +609,13 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface IntersectionC<CS extends [Mixed, Mixed, ...Array<Mixed>]> extends IntersectionType<CS, CS extends [Mixed, Mixed] ? TypeOf<CS['0']> & TypeOf<CS['1']> : CS extends [Mixed, Mixed, Mixed] ? TypeOf<CS['0']> & TypeOf<CS['1']> & TypeOf<CS['2']> : CS extends [Mixed, Mixed, Mixed, Mixed] ? TypeOf<CS['0']> & TypeOf<CS['1']> & TypeOf<CS['2']> & TypeOf<CS['3']> : CS extends [Mixed, Mixed, Mixed, Mixed, Mixed] ? TypeOf<CS['0']> & TypeOf<CS['1']> & TypeOf<CS['2']> & TypeOf<CS['3']> & TypeOf<CS['4']> : unknown, CS extends [Mixed, Mixed] ? OutputOf<CS['0']> & OutputOf<CS['1']> : CS extends [Mixed, Mixed, Mixed] ? OutputOf<CS['0']> & OutputOf<CS['1']> & OutputOf<CS['2']> : CS extends [Mixed, Mixed, Mixed, Mixed] ? OutputOf<CS['0']> & OutputOf<CS['1']> & OutputOf<CS['2']> & OutputOf<CS['3']> : CS extends [Mixed, Mixed, Mixed, Mixed, Mixed] ? OutputOf<CS['0']> & OutputOf<CS['1']> & OutputOf<CS['2']> & OutputOf<CS['3']> & OutputOf<CS['4']> : unknown, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed, E extends Mixed>(types: [A, B, C, D, E], name?: string): IntersectionType<[A, B, C, D, E], TypeOf<A> & TypeOf<B> & TypeOf<C> & TypeOf<D> & TypeOf<E>, OutputOf<A> & OutputOf<B> & OutputOf<C> & OutputOf<D> & OutputOf<E>, mixed>; | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed>(types: [A, B, C, D], name?: string): IntersectionType<[A, B, C, D], TypeOf<A> & TypeOf<B> & TypeOf<C> & TypeOf<D>, OutputOf<A> & OutputOf<B> & OutputOf<C> & OutputOf<D>, mixed>; | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed>(types: [A, B, C], name?: string): IntersectionType<[A, B, C], TypeOf<A> & TypeOf<B> & TypeOf<C>, OutputOf<A> & OutputOf<B> & OutputOf<C>, mixed>; | ||
export declare function intersection<A extends Mixed, B extends Mixed>(types: [A, B], name?: string): IntersectionType<[A, B], TypeOf<A> & TypeOf<B>, OutputOf<A> & OutputOf<B>, mixed>; | ||
export declare function intersection<A extends Mixed>(types: [A], name?: string): IntersectionType<[A], TypeOf<A>, OutputOf<A>, mixed>; | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed, E extends Mixed>(types: [A, B, C, D, E], name?: string): IntersectionC<[A, B, C, D, E]>; | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed>(types: [A, B, C, D], name?: string): IntersectionC<[A, B, C, D]>; | ||
export declare function intersection<A extends Mixed, B extends Mixed, C extends Mixed>(types: [A, B, C], name?: string): IntersectionC<[A, B, C]>; | ||
export declare function intersection<A extends Mixed, B extends Mixed>(types: [A, B], name?: string): IntersectionC<[A, B]>; | ||
/** | ||
@@ -518,9 +630,14 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface TupleC<CS extends [Mixed, ...Array<Mixed>]> extends TupleType<CS, CS extends [Mixed] ? [TypeOf<CS['0']>] : CS extends [Mixed, Mixed] ? [TypeOf<CS['0']>, TypeOf<CS['1']>] : CS extends [Mixed, Mixed, Mixed] ? [TypeOf<CS['0']>, TypeOf<CS['1']>, TypeOf<CS['2']>] : CS extends [Mixed, Mixed, Mixed, Mixed] ? [TypeOf<CS['0']>, TypeOf<CS['1']>, TypeOf<CS['2']>, TypeOf<CS['3']>] : CS extends [Mixed, Mixed, Mixed, Mixed, Mixed] ? [TypeOf<CS['0']>, TypeOf<CS['1']>, TypeOf<CS['2']>, TypeOf<CS['3']>, TypeOf<CS['4']>] : unknown, CS extends [Mixed] ? [OutputOf<CS['0']>] : CS extends [Mixed, Mixed] ? [OutputOf<CS['0']>, OutputOf<CS['1']>] : CS extends [Mixed, Mixed, Mixed] ? [OutputOf<CS['0']>, OutputOf<CS['1']>, OutputOf<CS['2']>] : CS extends [Mixed, Mixed, Mixed, Mixed] ? [OutputOf<CS['0']>, OutputOf<CS['1']>, OutputOf<CS['2']>, OutputOf<CS['3']>] : CS extends [Mixed, Mixed, Mixed, Mixed, Mixed] ? [OutputOf<CS['0']>, OutputOf<CS['1']>, OutputOf<CS['2']>, OutputOf<CS['3']>, OutputOf<CS['4']>] : unknown, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed, E extends Mixed>(types: [A, B, C, D, E], name?: string): TupleType<[A, B, C, D, E], [TypeOf<A>, TypeOf<B>, TypeOf<C>, TypeOf<D>, TypeOf<E>], [OutputOf<A>, OutputOf<B>, OutputOf<C>, OutputOf<D>, OutputOf<E>], mixed>; | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed>(types: [A, B, C, D], name?: string): TupleType<[A, B, C, D], [TypeOf<A>, TypeOf<B>, TypeOf<C>, TypeOf<D>], [OutputOf<A>, OutputOf<B>, OutputOf<C>, OutputOf<D>], mixed>; | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed>(types: [A, B, C], name?: string): TupleType<[A, B, C], [TypeOf<A>, TypeOf<B>, TypeOf<C>], [OutputOf<A>, OutputOf<B>, OutputOf<C>], mixed>; | ||
export declare function tuple<A extends Mixed, B extends Mixed>(types: [A, B], name?: string): TupleType<[A, B], [TypeOf<A>, TypeOf<B>], [OutputOf<A>, OutputOf<B>], mixed>; | ||
export declare function tuple<A extends Mixed>(types: [A], name?: string): TupleType<[A], [TypeOf<A>], [OutputOf<A>], mixed>; | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed, E extends Mixed>(types: [A, B, C, D, E], name?: string): TupleC<[A, B, C, D, E]>; | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed, D extends Mixed>(types: [A, B, C, D], name?: string): TupleC<[A, B, C, D]>; | ||
export declare function tuple<A extends Mixed, B extends Mixed, C extends Mixed>(types: [A, B, C], name?: string): TupleC<[A, B, C]>; | ||
export declare function tuple<A extends Mixed, B extends Mixed>(types: [A, B], name?: string): TupleC<[A, B]>; | ||
export declare function tuple<A extends Mixed>(types: [A], name?: string): TupleC<[A]>; | ||
/** | ||
@@ -535,5 +652,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface ReadonlyC<C extends Mixed> extends ReadonlyType<C, Readonly<TypeOf<C>>, Readonly<OutputOf<C>>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const readonly: <RT extends Mixed>(type: RT, name?: string) => ReadonlyType<RT, Readonly<RT["_A"]>, Readonly<RT["_O"]>, unknown>; | ||
export declare const readonly: <RT extends Mixed>(type: RT, name?: string) => ReadonlyC<RT>; | ||
/** | ||
@@ -548,5 +670,10 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface ReadonlyArrayC<C extends Mixed> extends ReadonlyArrayType<C, ReadonlyArray<TypeOf<C>>, ReadonlyArray<OutputOf<C>>, unknown> { | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const readonlyArray: <RT extends Mixed>(type: RT, name?: string) => ReadonlyArrayType<RT, ReadonlyArray<RT["_A"]>, ReadonlyArray<RT["_O"]>, unknown>; | ||
export declare const readonlyArray: <RT extends Mixed>(type: RT, name?: string) => ReadonlyArrayC<RT>; | ||
/** | ||
@@ -561,2 +688,7 @@ * @since 1.0.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface StrictC<P extends Props> extends StrictType<P, TypeOfProps<P>, OutputOfProps<P>, unknown> { | ||
} | ||
/** | ||
* Specifies that only the given properties are allowed | ||
@@ -566,3 +698,3 @@ * @deprecated use `exact` instead | ||
*/ | ||
export declare const strict: <P extends Props>(props: P, name?: string) => StrictType<P, TypeOfProps<P>, OutputOfProps<P>, unknown>; | ||
export declare const strict: <P extends Props>(props: P, name?: string) => StrictC<P>; | ||
/** | ||
@@ -609,3 +741,3 @@ * @since 1.3.0 | ||
*/ | ||
export declare const getTagValue: <Tag extends string>(tag: Tag) => (type: Tagged<Tag, any, any>) => string | number | boolean; | ||
export declare const getTagValue: <Tag extends string>(tag: Tag) => (type: Tagged<Tag, any, any>) => LiteralValue; | ||
/** | ||
@@ -619,5 +751,10 @@ * @since 1.3.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface TaggedUnionC<Tag extends string, CS extends [Tagged<Tag>, Tagged<Tag>, ...Array<Tagged<Tag>>]> extends TaggedUnionType<Tag, CS, TypeOf<CS[number]>, OutputOf<CS[number]>, unknown> { | ||
} | ||
/** | ||
* @since 1.3.0 | ||
*/ | ||
export declare const taggedUnion: <Tag extends string, RTS extends Tagged<Tag, any, any>[]>(tag: Tag, types: RTS, name?: string) => TaggedUnionType<Tag, RTS, RTS[number]["_A"], RTS[number]["_O"], unknown>; | ||
export declare const taggedUnion: <Tag extends string, RTS extends [Tagged<Tag, any, any>, Tagged<Tag, any, any>, ...Tagged<Tag, any, any>[]]>(tag: Tag, types: RTS, name?: string) => TaggedUnionC<Tag, RTS>; | ||
/** | ||
@@ -651,8 +788,14 @@ * @since 1.1.0 | ||
/** | ||
* @since 1.5.3 | ||
*/ | ||
export interface ExactC<C extends HasProps> extends ExactType<C, TypeOf<C>, OutputOf<C>, InputOf<C>> { | ||
} | ||
/** | ||
* @since 1.1.0 | ||
*/ | ||
export declare function exact<RT extends HasProps>(type: RT, name?: string): ExactType<RT, TypeOf<RT>, OutputOf<RT>, InputOf<RT>>; | ||
export declare function exact<RT extends HasProps>(type: RT, name?: string): ExactC<RT>; | ||
/** | ||
* Drops the runtime type "kind" | ||
* @since 1.1.0 | ||
* @deprecated | ||
*/ | ||
@@ -662,2 +805,3 @@ export declare function clean<A, O = A, I = mixed>(type: Type<A, O, I>): Type<A, O, I>; | ||
* @since 1.0.0 | ||
* @deprecated | ||
*/ | ||
@@ -669,2 +813,3 @@ export declare type PropsOf<T extends { | ||
* @since 1.1.0 | ||
* @deprecated | ||
*/ | ||
@@ -683,2 +828,3 @@ export declare type Exact<T, X extends T> = T & { | ||
* @since 1.1.0 | ||
* @deprecated | ||
*/ | ||
@@ -685,0 +831,0 @@ export declare function alias<A, O, P, I>(type: PartialType<P, A, O, I>): <AA extends Exact<A, AA>, OO extends Exact<O, OO> = O, PP extends Exact<P, PP> = P, II extends I = I>() => PartialType<PP, AA, OO, II>; |
@@ -803,3 +803,3 @@ "use strict"; | ||
} | ||
return exports.failures(errors); | ||
return errors.length ? exports.failures(errors) : exports.failure(m, c); | ||
}, useIdentity(types, len) | ||
@@ -835,3 +835,3 @@ ? exports.identity | ||
var len = types.length; | ||
return new IntersectionType(name, function (m) { return types.every(function (type) { return type.is(m); }); }, function (m, c) { | ||
return new IntersectionType(name, function (m) { return (len === 0 ? false : types.every(function (type) { return type.is(m); })); }, function (m, c) { | ||
var a = m; | ||
@@ -841,3 +841,3 @@ var errors = []; | ||
var type_5 = types[i]; | ||
var validation = type_5.validate(a, c); | ||
var validation = type_5.validate(a, exports.appendContext(c, String(i), type_5)); | ||
if (validation.isLeft()) { | ||
@@ -850,3 +850,3 @@ pushAll(errors, validation.value); | ||
} | ||
return errors.length ? exports.failures(errors) : exports.success(a); | ||
return errors.length ? exports.failures(errors) : len === 0 ? exports.failure(m, c) : exports.success(a); | ||
}, useIdentity(types, len) | ||
@@ -1182,2 +1182,3 @@ ? exports.identity | ||
* @since 1.1.0 | ||
* @deprecated | ||
*/ | ||
@@ -1184,0 +1185,0 @@ function clean(type) { |
{ | ||
"name": "io-ts", | ||
"version": "1.5.2", | ||
"version": "1.5.3", | ||
"description": "TypeScript compatible runtime type system for IO validation", | ||
@@ -15,3 +15,3 @@ "files": [ | ||
"fix-prettier": "prettier --no-semi --single-quote --print-width 120 --parser typescript --write \"{src,test,examples,exercises}/**/*.ts\"", | ||
"test": "npm run prettier && npm run lint && npm run dtslint && npm run jest", | ||
"test": "npm run prettier && npm run lint && npm run dtslint && npm run declaration && npm run jest", | ||
"clean": "rimraf lib/*", | ||
@@ -21,3 +21,5 @@ "build": "npm run clean && tsc", | ||
"perf": "node perf/index", | ||
"dtslint": "dtslint dtslint" | ||
"dtslint": "dtslint dtslint", | ||
"declaration": "tsc -p declaration/tsconfig.json", | ||
"mocha": "TS_NODE_CACHE=false mocha -r ts-node/register test/*.ts" | ||
}, | ||
@@ -44,5 +46,7 @@ "repository": { | ||
"jest": "^23.6.0", | ||
"prettier": "1.13.4", | ||
"mocha": "^5.2.0", | ||
"prettier": "^1.15.3", | ||
"rimraf": "2.6.2", | ||
"ts-jest": "^23.10.4", | ||
"ts-node": "^7.0.1", | ||
"tslint": "^5.11.0", | ||
@@ -49,0 +53,0 @@ "tslint-config-standard": "^8.0.1", |
103
README.md
@@ -172,6 +172,6 @@ [![build status](https://img.shields.io/travis/gcanti/io-ts/master.svg?style=flat-square)](https://travis-ci.org/gcanti/io-ts) | ||
```ts | ||
interface IPerson extends t.TypeOf<typeof Person> {} | ||
type Person = t.TypeOf<typeof Person> | ||
// same as | ||
interface IPerson { | ||
type Person = { | ||
name: string | ||
@@ -347,8 +347,9 @@ age: number | ||
interface CT extends t.TypeOf<typeof C> {} | ||
type C = t.TypeOf<typeof C> | ||
// same as | ||
type CT = { | ||
type C = { | ||
foo: string | ||
bar?: number | ||
} & { | ||
bar?: number | undefined | ||
} | ||
@@ -367,6 +368,6 @@ ``` | ||
interface PartialPerson extends t.TypeOf<typeof PartialPerson> {} | ||
type PartialPerson = t.TypeOf<typeof PartialPerson> | ||
// same as | ||
interface PartialPerson { | ||
type PartialPerson = { | ||
name?: string | ||
@@ -441,3 +442,6 @@ age?: number | ||
```ts | ||
const UserModel = t.interface({ name: t.string }) | ||
const UserModel = t.type({ | ||
name: t.string | ||
}) | ||
functionThatRequiresRuntimeType(ResponseBody(t.array(UserModel)), ...params) | ||
@@ -529,84 +533,1 @@ ``` | ||
- quick info stays responsive | ||
# Known issues | ||
VS Code might display weird types for nested types | ||
```ts | ||
const NestedInterface = t.type({ | ||
foo: t.string, | ||
bar: t.type({ | ||
baz: t.string | ||
}) | ||
}) | ||
type NestedInterfaceType = t.TypeOf<typeof NestedInterface> | ||
/* | ||
Hover on NestedInterfaceType will display | ||
type NestedInterfaceType = { | ||
foo: string; | ||
bar: t.TypeOfProps<{ | ||
baz: t.StringType; | ||
}>; | ||
} | ||
instead of | ||
type NestedInterfaceType = { | ||
foo: string; | ||
bar: { | ||
baz: string | ||
} | ||
} | ||
*/ | ||
``` | ||
## Solution: the `clean` and `alias` functions | ||
The pattern | ||
```ts | ||
// private runtime type | ||
const _NestedInterface = t.type({ | ||
foo: t.string, | ||
bar: t.type({ | ||
baz: t.string | ||
}) | ||
}) | ||
// a type alias using interface | ||
export interface NestedInterface extends t.TypeOf<typeof _NestedInterface> {} | ||
// | ||
// Two possible options for the exported runtime type | ||
// | ||
// a clean NestedInterface which drops the kind... | ||
export const NestedInterface = t.clean<NestedInterface, NestedInterface>(_NestedInterface) | ||
/* | ||
NestedInterface: t.Type<NestedInterface, NestedInterface, t.mixed> | ||
*/ | ||
// ... or an alias of _NestedInterface which keeps the kind | ||
export const NestedInterface = t.alias(_NestedInterface)<NestedInterface, NestedInterface>() | ||
/* | ||
t.InterfaceType<{ | ||
foo: t.StringType; | ||
bar: t.InterfaceType<{ | ||
baz: t.StringType; | ||
}, t.TypeOfProps<{ | ||
baz: t.StringType; | ||
}>, t.OutputOfProps<{ | ||
baz: t.StringType; | ||
}>, t.mixed>; | ||
}, NestedInterface, NestedInterface, t.mixed> | ||
*/ | ||
// you can also alias the props | ||
interface NestedInterfaceProps extends t.PropsOf<typeof _NestedInterface> {} | ||
export const NestedInterface = t.alias(_NestedInterface)<NestedInterface, NestedInterface, NestedInterfaceProps>() | ||
/* | ||
const NestedInterface: t.InterfaceType<NestedInterfaceProps, NestedInterface, NestedInterface, t.mixed> | ||
*/ | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
94422
2072
14
529