diff --git a/src/__tests__/types.test.ts b/src/__tests__/types.test.ts index 0a491ca8..06135b1f 100644 --- a/src/__tests__/types.test.ts +++ b/src/__tests__/types.test.ts @@ -956,6 +956,34 @@ describe('types', () => { expectType(true); expectType('foo'); }); + + test('nullable', () => { + const value = types.oneOf([types.string(), types.null()], { required: true }); + + expect(value).toEqual( + expect.objectContaining({ + $required: true, + oneOf: [ + { + $required: true, + type: 'string', + }, + { + $required: true, + type: 'null', + }, + ], + }) + ); + + expectType(value); + // @ts-expect-error `value` should not be `number` + expectType(value); + // @ts-expect-error `value` should not be `undefined` + expectType(value); + expectType('foo'); + expectType(null); + }); }); }); }); diff --git a/src/types.ts b/src/types.ts index 9b1c9c6b..2e4a032a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -213,7 +213,7 @@ export function objectGeneric( export function oneOf( types: Types, options?: Options -): GetType, Options> { +): GetType, Options> { const { required } = options || {}; // eslint-disable-next-line @typescript-eslint/no-unsafe-return @@ -226,7 +226,7 @@ export function oneOf( $required: true, })) : types, - } as unknown as GetType, Options>; + } as unknown as GetType, Options>; } function createSimpleType(type: BSONType) {