testing-library / jest-dom

:owl: Custom jest matchers to test the state of the DOM
https://testing-library.com/docs/ecosystem-jest-dom
MIT License
4.35k stars 386 forks source link

jest-dom/types/matchers-standalone.d.ts:9:3 - error TS2300: Duplicate identifier 'toHaveClass'. #605

Open aliu-vmware opened 1 month ago

aliu-vmware commented 1 month ago

Relevant code or config:

What you did:

Tried to start up a storybook using a default angular project generated via ng new and ng generate library

What happened:

ERROR in node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts:9:3 - error TS2300: Duplicate identifier 'toHaveClass'.

9   toHaveClass: (expected: any, ...rest: string[]) => MatcherReturnType
    ~~~~~~~~~~~

ERROR in node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts:10:3 - error TS2300: Duplicate identifier 'toHaveClass'.

10   toHaveClass: (
     ~~~~~~~~~~~

ERROR in node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts:10:3 - error TS2717: Subsequent property declarations must have the same type.  Property 'toHaveClass' must be of type '(expected: any, ...rest: string[]) => MatcherReturnType', but here has type '(expected: any, className: string, options?: { exact: boolean; } | undefined) => MatcherReturnType'.

10   toHaveClass: (
     ~~~~~~~~~~~

  node_modules/@testing-library/jest-dom/types/matchers-standalone.d.ts:9:3
    9   toHaveClass: (expected: any, ...rest: string[]) => MatcherReturnType
        ~~~~~~~~~~~
    'toHaveClass' was also declared here.

Reproduction:

https://www.typescriptlang.org/play/?ts=5.1.6#code/PTAEHUFMBsGMHsC2lQBd5oBYoCoE8AHSAZVgCcBLA1UABWgEM8BzM+AVwDsATAGiwoBnUENANQAd0gAjQRVSQAUCEmYKsTKGYUAbpGF4OY0BoadYKdJMoL+gzAzIoz3UNEiPOofEVKVqAHSKymAAmkYI7NCuqGqcANag8ABmIjQUXrFOKBJMggBcISGgoAC0oACCbvCwDKgU8JkY7p7ehCTkVDQS2E6gnPCxGcwmZqDSTgzxxWWVoASMFmgYkAAeRJTInN3ymj4d-jSCeNsMq-wuoPaOltigAKoASgAywhK7SbGQZIIz5VWCFzSeCrZagNYbChbHaxUDcCjJZLfSDbExIAgUdxkUBIursJzCFJtXydajBDIKMjJBhLACydQ030ekFQ+M4+1AAG9FCUCAxBAVxvB4C1ODzQMgBQxmJB8qAABQASlAAF4AHxXVCUTjMRQAX3J22+1KWAHk9GRoPAGNxINx6ahGT8ueL0AAJBh6ADCjAFcvlEMgsAU3DlZjw-ACUYJqDlgi1wwA2gBdZXq0AOp3M1lkdntV3wD3e32C+XikqB4N2sOcCPlkwlgByDGQcYTOt49fg1AanEEAH45Zy1jTY0KRR5OHrOyU0xrM71s2z9vqgA

Problem description:

matchers-standalone.d.ts seems to have an invalid syntax. See https://github.com/microsoft/TypeScript/issues/4462 for a longer explanation.

Suggested solution:

interface OverloadedMatchers {
  toHaveClass(expected: any, ...rest: string[]) : MatcherReturnType
  toHaveClass(
    expected: any,
    className: string,
    options?: {exact: boolean},
  ) : MatcherReturnType
}

seems to work, and is probably what the original code intended (overloaded method signature). Note the change from arrow function to class method syntax.

james-nash commented 2 weeks ago

Encountered this exact same issue too.

FWIW, I've got @testing-library/jest-dom 6.4.6, which is being installed into my project via @storybook/test 8.1.10. I'm working around it for now by setting skibLibCheck to true in my tsconfig.json, but would prefer not to have to do that.

gnapse commented 2 weeks ago

Suggested solution:

Would you mind opening a PR to introduce that change?

tonyhallett commented 1 day ago

gnapse https://github.com/testing-library/jest-dom/pull/611