alex-kinokon / jsx-dom

Use JSX to create DOM elements.
BSD 3-Clause "New" or "Revised" License
278 stars 30 forks source link

Release 8.0.5 introduced errors. Argument of type 'ReactElement' is not assignable to parameter of type 'Element' #109

Open yoriiis opened 1 month ago

yoriiis commented 1 month ago

Hello @alex-kinokon,

I use this package on several projects without any problems, but it seems that the latest version 8.1.5 has introduced some errors. The following code

// index.tsx
document.body.insertAdjacentElement('afterbegin', <div>Hello</div>)

generates this error

TS2345: Argument of type 'ReactElement' is not assignable to parameter of type 'Element'.
  Type 'DocumentFragment' is missing the following properties from type 'Element': attributes, classList, className, clientHeight, and 109 more.

With the previous version 8.1.4 there are no errors. I use the automatic runtime with jsx-dom-cjs.

I'm available if you need more info. Thanks to you

alex-kinokon commented 1 month ago

PR welcome.

yoriiis commented 1 month ago

In https://github.com/alex-kinokon/jsx-dom/commit/6e0e7e83ba6fe5e839588620c451ae11c83536e4, the type of ReactElement has changed in the file index.d.ts#L61.

I tested without the | DocumentFragment and the TypeScript error does not appear locally with the following example.

document.body.insertAdjacentElement('afterbegin', <h1>OK</h1>)

However, I don't fully understand these changes and I don't know why the error appears in this example. I'd like to avoid creating another problem. Do you have more information?

Proposed changes:

# https://github.com/alex-kinokon/jsx-dom/blob/master/types/index.d.ts
- export type ReactElement = HTMLElement | SVGElement | DocumentFragment
+ export type ReactElement = HTMLElement | SVGElement
alex-kinokon commented 1 month ago

Please see #107.