diff --git a/packages/expect/src/types.ts b/packages/expect/src/types.ts index 17eac43c1..fd0d2a58b 100644 --- a/packages/expect/src/types.ts +++ b/packages/expect/src/types.ts @@ -186,13 +186,13 @@ export interface AsymmetricMatchersContaining extends CustomMatcher { closeTo: (expected: number, precision?: number) => any } +type WithAsymmetricMatcher = T | AsymmetricMatcher + export type DeeplyAllowMatchers = T extends Array - ? (DeeplyAllowMatchers | Element)[] + ? WithAsymmetricMatcher | DeeplyAllowMatchers[] : T extends object - ? { - [K in keyof T]: DeeplyAllowMatchers | AsymmetricMatcher - } - : T + ? WithAsymmetricMatcher | { [K in keyof T]: DeeplyAllowMatchers } + : WithAsymmetricMatcher export interface JestAssertion extends jest.Matchers, CustomMatcher { /** diff --git a/test/core/test/expect.test-d.ts b/test/core/test/expect.test-d.ts index 1add65213..20e480bb9 100644 --- a/test/core/test/expect.test-d.ts +++ b/test/core/test/expect.test-d.ts @@ -111,4 +111,12 @@ test('expect.* allows asymmetrict mattchers with different types', () => { // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/62831/files#diff-ff7b882e4a29e7fe0e348a6bdf8b11774d606eaa221009b166b01389576d921fR1237 expect({ list: [1, 2, 3] }).toMatchObject({ list: expect.any(Array) }) expect({ list: [1, 2, 3] }).toMatchObject<{ list: number[] }>({ list: expect.any(Array) }) + + // expect + // https://github.com/vitest-dev/vitest/issues/8081 + function expectMany(value: ({ enabled: false } | { enabled: true; data: T })) { + expect(value).toEqual(value) + expect(value).toMatchObject(value) + } + expectMany({ enabled: true, data: 'ok' }) })