webcomponents / polyfills

Web Components Polyfills
BSD 3-Clause "New" or "Revised" License
1.13k stars 165 forks source link

Fix closure compiler error #572

Closed sjamesr closed 3 months ago

sjamesr commented 4 months ago

I'm trying to fix some bugs in the Closure compiler template type checker. The fix has revealed a type error in shadydom, which this PR attempts to fix.

With the fix, the following error occurs:

shadydom/src/patch-events.js:286:53: ERROR - [JSC_TYPE_MISMATCH] actual parameter 3 of Object.defineProperty does not match formal parameter
found   : ObjectPropertyDescriptor<Event>
required: ObjectPropertyDescriptor<(Event|{
  composed: ?,
  composedPath: function(this:Event): ?,
  relatedTarget: ?,
  stopImmediatePropagation: function(this:Event): undefined,
  stopPropagation: function(this:Event): undefined,
  target: ?
})>
  286|     /** @type {!ObjectPropertyDescriptor<!Event>} */ ({
                                                            ^^
  287|       /**
       ^^^^^^^^^
...
  296|       configurable: true,
       ^^^^^^^^^^^^^^^^^^^^^^^^^
  297|     })
       ^^^^^^

This error is correct because EventPatches is an object literal, which can never be an Event because Event is a nominal type in Closure.

I think this change should be OK and will unblock Closure compiler fixes.

brad4d commented 3 months ago

To clarify: In the description the phrase "with the fix the following error occurs" is saying that when closure-compiler is fixed it will report the error unless this PR is accepted first.

Please accept this PR to avoid having this error occur in your build.

brad4d commented 3 months ago

I think a better title for this issue would be "Fix a type error that closure-compiler misses now, but will soon start reporting"