Html element onerror eventhandler override #2272
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes microsoft/TypeScript#62075.
Originally, I created this #2148 (comment), but closed it as the that approach wasn't ideal.
I started with
Omit<GlobalEventHandlers, 'onerror'>as an approach. However, I quickly realized it isn't the correct path and creates a whole slew of new problems due to how event handlers are mapped to different elements during the emit phase. (if you're curious to see what exactly I ran into, I can push up a separate PR).What this change does:
Introduces a new type
DocumentOrGlobalOnErrorEventHandlerwhich extends theOnErrorEventHandlerNonNulltype with HTMLElement specific handlers. This type then overrides GlobalEventHandlers onerror property. This allow us to be backwards compatible and fix the bug.This did require a change to both
types.tsandemitter.tsso that exposed was accounted for when creating a new typedef. I needed the newDocumentOrGlobalOnErrorEventHandlerto only be exposed on the dom library.The
onerrorofGlobalEventHandlerscannot be overridden by theoverrideType.tsfile. I tried to a few times, in both mixin-ins and interfaces. It turns out it has to be overidden in thepatches/events.kdlfile.Let me know if I missed anything or another approach would be better. I think this threads the needle nicely as it works only on dom elements and still provides both the global and HTMLElement specific onerror handling types.