diff --git a/src/utils.ts b/src/utils.ts index 1257f8e0..b550b1e3 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -362,7 +362,9 @@ type OmitExactOptional = Omit< Schema, { [K in keyof Schema]: Schema[K] extends ExactOptionalStruct - ? K + ? Schema[K] extends never + ? never + : K : never; }[keyof Schema] >; @@ -371,7 +373,9 @@ type PickExactOptional = Pick< Schema, { [K in keyof Schema]: Schema[K] extends ExactOptionalStruct - ? K + ? Schema[K] extends never + ? never + : K : never; }[keyof Schema] >; diff --git a/test/typings/exactOptional.ts b/test/typings/exactOptional.ts index b850a671..2daf616b 100644 --- a/test/typings/exactOptional.ts +++ b/test/typings/exactOptional.ts @@ -5,6 +5,8 @@ import { number, object, enums, + never, + record, } from '../../src'; import { test } from '../index.test'; @@ -46,3 +48,15 @@ test<{ ); return value; }); + +test<{ + a?: Record; +}>((value) => { + assert( + value, + object({ + a: exactOptional(record(string(), never())), + }), + ); + return value; +}); diff --git a/test/typings/object.ts b/test/typings/object.ts index 90572046..954b73b4 100644 --- a/test/typings/object.ts +++ b/test/typings/object.ts @@ -1,4 +1,4 @@ -import { assert, object, number, string } from '../../src'; +import { assert, object, number, string, record, never } from '../../src'; import { test } from '../index.test'; test>((value) => { @@ -13,3 +13,15 @@ test<{ assert(value, object({ a: number(), b: string() })); return value; }); + +test<{ + a: Record; +}>((value) => { + assert( + value, + object({ + a: record(string(), never()), + }), + ); + return value; +});