Skip to content

Mocked type requires to mock private properties #8805

@cexbrayat

Description

@cexbrayat

Describe the bug

Consider the following TS class:

export class MyClass {
  private innerProperty = () => 'inner';

  public outerProperty = () => 'outer';
}

When trying to stub it, Mocked complains if the private property is omitted:

const myClass: Mocked<MyClass> = { outerProperty: vi.fn() };
// Type '{ outerProperty: Mock<() => string>; }' is not assignable to type 'Mocked<MyClass>'.
//  Property 'innerProperty' is missing in type '{ outerProperty: Mock<() => string>; }' but required in type 'MyClass'.

I would expect the mock to be OK if only the public properties are provided.

Reproduction

https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzgWQgYwNYFMAmcC+cAZlBCHAOQBuwMWAzjBQNwBQrWAHpLHGgDYBDevRQBPAMJCRiVnDhgowKoLpxgAOw1YoABVJgdMMXAC8cABQBKMwD5Km7VBbt5YAK4AjfsDRwI7nR6BkYm5tZ2lAFBLvjsaBAajHAgktL0AFwo6Ng4ADzIacL09uZI0Tr6EIawYlk0AHREGhH4zEA

System Info

System:
    OS: macOS 15.6.1
    CPU: (10) arm64 Apple M1 Max
    Memory: 9.06 GB / 64.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.18.0 - /Users/cedric/.volta/tools/image/node/22.18.0/bin/node
    Yarn: 1.22.22 - /Users/cedric/.volta/tools/image/yarn/1.22.22/bin/yarn
    npm: 10.9.0 - /Users/cedric/.volta/tools/image/npm/10.9.0/bin/npm
    pnpm: 10.19.0 - /Users/cedric/.volta/tools/image/node/22.18.0/bin/pnpm
  Browsers:
    Chrome: 141.0.7390.123
    Firefox: 142.0
    Safari: 18.6
  npmPackages:
    @vitest/browser-playwright: 4.0.2 => 4.0.2
    @vitest/coverage-v8: 4.0.2 => 4.0.2
    vitest: 4.0.2 => 4.0.2

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