Skip to content

v4: vi.mocked() regression for static class methods types #9172

@purepear

Description

@purepear

Describe the bug

vitest@4+ breaks the TS types of .mockImplementation()/.mockResolvedValue()/etc. for static class methods of vi.mocked(MyClass). This was working in vitest@3
(tests are passing, but TS 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