From e785e1a4ddf1b7fb2d1ef48cb258d8e21a775446 Mon Sep 17 00:00:00 2001 From: Caleb Chase Date: Thu, 10 Dec 2020 15:16:48 -0600 Subject: [PATCH] fix: array handling in SchemaOf type (#1169) - Move array before object so that inference works correctly - Include lazy as part of array type, to match the class definition --- src/index.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1bf992f43..97ae53eef 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,7 +6,7 @@ import DateSchema, { create as dateCreate } from './date'; import ObjectSchema, { AnyObject, create as objectCreate } from './object'; import ArraySchema, { create as arrayCreate } from './array'; import { create as refCreate } from './Reference'; -import { create as lazyCreate } from './Lazy'; +import Lazy, { create as lazyCreate } from './Lazy'; import ValidationError from './ValidationError'; import reach from './util/reach'; import isSchema from './util/isSchema'; @@ -39,20 +39,20 @@ function addMethod(schemaType: any, name: string, fn: any) { type ObjectSchemaOf = ObjectSchema< { - [k in keyof T]-?: T[k] extends AnyObject + [k in keyof T]-?: T[k] extends Array + ? ArraySchema> + : T[k] extends AnyObject ? // we can't use ObjectSchema<{ []: SchemaOf }> b/c TS produces a union of two schema ObjectSchemaOf - : T[k] extends Array - ? ArraySchema> : BaseSchema, AnyObject, T[k]>; } >; -type SchemaOf = T extends AnyObject - ? ObjectSchemaOf - : T extends Array - ? ArraySchema> - : BaseSchema, AnyObject, T>; +type SchemaOf = T extends Array + ? ArraySchema | Lazy>> + : T extends AnyObject + ? ObjectSchemaOf + : BaseSchema, AnyObject, T>; export type AnyObjectSchema = ObjectSchema;