testing-library / react-testing-library

🐐 Simple and complete React DOM testing utilities that encourage good testing practices.
https://testing-library.com/react
MIT License
19.04k stars 1.11k forks source link

TypeScript: unexpected type errors when `exactOptionalPropertyTypes` is enabled #1320

Closed OliverJAsh closed 2 months ago

OliverJAsh commented 6 months ago

Relevant code or config:

{
  "dependencies": {
    "@testing-library/react": "^15.0.6",
    "typescript": "^5.4.5"
  }
}
{
  "compilerOptions": {
    "strict": true,
    "exactOptionalPropertyTypes": true,
    "lib": ["DOM", "ESNext"]
  }
}
import { renderHook } from '@testing-library/react';
renderHook;

What happened:

$ yarn run tsc
yarn run v1.22.22
warning package.json: No license field
$ /Users/oliver/Code/reduced-test-cases/testing-library-react-exactOptionalPropertyTypes/node_modules/.bin/tsc
node_modules/@testing-library/react/types/index.d.ts:58:18 - error TS2430: Interface 'ClientRenderOptions<Q, Container, BaseElement>' incorrectly extends interface 'RenderOptions<Q, Container, BaseElement>'.
  Types of property 'hydrate' are incompatible.
    Type 'boolean | undefined' is not assignable to type 'boolean'.
      Type 'undefined' is not assignable to type 'boolean'.

58 export interface ClientRenderOptions<
                    ~~~~~~~~~~~~~~~~~~~

node_modules/@testing-library/react/types/index.d.ts:185:18 - error TS2430: Interface 'ClientRenderHookOptions<Props, Q, Container, BaseElement>' incorrectly extends interface 'RenderHookOptions<Props, Q, Container, BaseElement>'.
  Types of property 'hydrate' are incompatible.
    Type 'boolean | undefined' is not assignable to type 'boolean'.

185 export interface ClientRenderHookOptions<
                     ~~~~~~~~~~~~~~~~~~~~~~~

Found 2 errors in the same file, starting at: node_modules/@testing-library/react/types/index.d.ts:58

error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Reproduction:

See above.

Problem description:

Unexpected TypeScript errors regarding exactOptionalPropertyTypes.

Suggested solution:

In ClientRenderHookOptions and ClientRenderOptions (node_modules/@testing-library/react/types/index.d.ts):

-  hydrate?: false | undefined
+  hydrate?: false