Skip to content

v4: vi.mocked static class methods type regression #9172

@purepear

Description

@purepear

Describe the bug

In vitest@3 TS is not complaining but in vitest@4 TS doesn't recognise .mockImplementation()/.mockResolvedValue()/etc. on vi.mocked() class's static methods.
(tests are passing, it's just TS that is not happy)

// Foo.ts
export class Foo {
  public static getBar(): string {
    return 'bar';
  }
}
// Foo.test.ts
import { vi, test, expect } from 'vitest';
import { Foo } from './Foo.js';

vi.mock('./Foo');

const mockedFoo = vi.mocked(Foo, { partial: true });

test('test', () => {
  mockedFoo.getBar.mockImplementation(() => 'mocked bar');

  expect(mockedFoo.getBar()).toBe('mocked bar');
});
 error TS2339: Property 'mockImplementation' does not exist on type ...
Image

Reproduction

Repro StackBlitz link

System Info

System:
    OS: Linux 5.0 undefined
    CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 0 Bytes / 0 Bytes
    Shell: 1.0 - /bin/jsh
  Binaries:
    Node: 20.19.1 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 10.8.2 - /usr/local/bin/npm
    pnpm: 8.15.6 - /usr/local/bin/pnpm
  npmPackages:
    vite: ^7.2.6 => 7.2.6 
    vitest: ^4.0.15 => 4.0.15

Used Package Manager

npm

Validations

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions