Skip to content

Event type for readystatechange is not specific enough #42202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 34 additions & 34 deletions src/lib/dom.generated.d.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,4 @@
/** @type {int} */ declare const n: any;
/** @type {float} */ declare const o: any;
/** @type {integer} */ declare const p: any;
/** @type {event} */ declare const q: Event | undefined;
/** @type {event} */ declare const q: Event<EventTarget> | undefined;
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,6 @@

// or, in the case of `event` likely erroneously refers to the type of the global Event object
/** @type {event} */const q = undefined;
>q : Event | undefined
>q : Event<EventTarget> | undefined
>undefined : undefined

6 changes: 6 additions & 0 deletions tests/baselines/reference/readyStateChangeEventOnDocument.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//// [readyStateChangeEventOnDocument.ts]
document.addEventListener('readystatechange', event => event.target?.readyState === 'complete'); // should not error


//// [readyStateChangeEventOnDocument.js]
document.addEventListener('readystatechange', function (event) { var _a; return ((_a = event.target) === null || _a === void 0 ? void 0 : _a.readyState) === 'complete'; }); // should not error
12 changes: 12 additions & 0 deletions tests/baselines/reference/readyStateChangeEventOnDocument.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
=== tests/cases/compiler/readyStateChangeEventOnDocument.ts ===
document.addEventListener('readystatechange', event => event.target?.readyState === 'complete'); // should not error
>document.addEventListener : Symbol(Document.addEventListener, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
>document : Symbol(document, Decl(lib.dom.d.ts, --, --))
>addEventListener : Symbol(Document.addEventListener, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
>event : Symbol(event, Decl(readyStateChangeEventOnDocument.ts, 0, 45))
>event.target?.readyState : Symbol(Document.readyState, Decl(lib.dom.d.ts, --, --))
>event.target : Symbol(Event.target, Decl(lib.dom.d.ts, --, --))
>event : Symbol(event, Decl(readyStateChangeEventOnDocument.ts, 0, 45))
>target : Symbol(Event.target, Decl(lib.dom.d.ts, --, --))
>readyState : Symbol(Document.readyState, Decl(lib.dom.d.ts, --, --))

17 changes: 17 additions & 0 deletions tests/baselines/reference/readyStateChangeEventOnDocument.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
=== tests/cases/compiler/readyStateChangeEventOnDocument.ts ===
document.addEventListener('readystatechange', event => event.target?.readyState === 'complete'); // should not error
>document.addEventListener('readystatechange', event => event.target?.readyState === 'complete') : void
>document.addEventListener : { <K extends "readystatechange" | "fullscreenchange" | "fullscreenerror" | "pointerlockchange" | "pointerlockerror" | "visibilitychange" | "abort" | "animationcancel" | "animationend" | "animationiteration" | "animationstart" | "auxclick" | "blur" | "cancel" | "canplay" | "canplaythrough" | "change" | "click" | "close" | "contextmenu" | "cuechange" | "dblclick" | "drag" | "dragend" | "dragenter" | "dragexit" | "dragleave" | "dragover" | "dragstart" | "drop" | "durationchange" | "emptied" | "ended" | "error" | "focus" | "focusin" | "focusout" | "gotpointercapture" | "input" | "invalid" | "keydown" | "keypress" | "keyup" | "load" | "loadeddata" | "loadedmetadata" | "loadstart" | "lostpointercapture" | "mousedown" | "mouseenter" | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" | "pause" | "play" | "playing" | "pointercancel" | "pointerdown" | "pointerenter" | "pointerleave" | "pointermove" | "pointerout" | "pointerover" | "pointerup" | "progress" | "ratechange" | "reset" | "resize" | "scroll" | "securitypolicyviolation" | "seeked" | "seeking" | "select" | "selectionchange" | "selectstart" | "stalled" | "submit" | "suspend" | "timeupdate" | "toggle" | "touchcancel" | "touchend" | "touchmove" | "touchstart" | "transitioncancel" | "transitionend" | "transitionrun" | "transitionstart" | "volumechange" | "waiting" | "wheel" | "copy" | "cut" | "paste">(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; }
>document : Document
>addEventListener : { <K extends "readystatechange" | "fullscreenchange" | "fullscreenerror" | "pointerlockchange" | "pointerlockerror" | "visibilitychange" | "abort" | "animationcancel" | "animationend" | "animationiteration" | "animationstart" | "auxclick" | "blur" | "cancel" | "canplay" | "canplaythrough" | "change" | "click" | "close" | "contextmenu" | "cuechange" | "dblclick" | "drag" | "dragend" | "dragenter" | "dragexit" | "dragleave" | "dragover" | "dragstart" | "drop" | "durationchange" | "emptied" | "ended" | "error" | "focus" | "focusin" | "focusout" | "gotpointercapture" | "input" | "invalid" | "keydown" | "keypress" | "keyup" | "load" | "loadeddata" | "loadedmetadata" | "loadstart" | "lostpointercapture" | "mousedown" | "mouseenter" | "mouseleave" | "mousemove" | "mouseout" | "mouseover" | "mouseup" | "pause" | "play" | "playing" | "pointercancel" | "pointerdown" | "pointerenter" | "pointerleave" | "pointermove" | "pointerout" | "pointerover" | "pointerup" | "progress" | "ratechange" | "reset" | "resize" | "scroll" | "securitypolicyviolation" | "seeked" | "seeking" | "select" | "selectionchange" | "selectstart" | "stalled" | "submit" | "suspend" | "timeupdate" | "toggle" | "touchcancel" | "touchend" | "touchmove" | "touchstart" | "transitioncancel" | "transitionend" | "transitionrun" | "transitionstart" | "volumechange" | "waiting" | "wheel" | "copy" | "cut" | "paste">(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; }
>'readystatechange' : "readystatechange"
>event => event.target?.readyState === 'complete' : (this: Document, event: Event<Document>) => boolean
>event : Event<Document>
>event.target?.readyState === 'complete' : boolean
>event.target?.readyState : DocumentReadyState
>event.target : Document
>event : Event<Document>
>target : Document
>readyState : DocumentReadyState
>'complete' : "complete"

Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
tests/cases/conformance/salsa/chrome-devtools-DOMExtension.js(2,17): error TS2339: Property 'removeChildren' does not exist on type 'Event'.
tests/cases/conformance/salsa/chrome-devtools-DOMExtension.js(3,10): error TS2339: Property 'textContent' does not exist on type 'Event'.
tests/cases/conformance/salsa/chrome-devtools-DOMExtension.js(2,17): error TS2339: Property 'removeChildren' does not exist on type 'Event<EventTarget>'.
tests/cases/conformance/salsa/chrome-devtools-DOMExtension.js(3,10): error TS2339: Property 'textContent' does not exist on type 'Event<EventTarget>'.


==== tests/cases/conformance/salsa/chrome-devtools-DOMExtension.js (2 errors) ====
// Extend that DOM! (doesn't work, but shouldn't crash)
Event.prototype.removeChildren = function () {
~~~~~~~~~~~~~~
!!! error TS2339: Property 'removeChildren' does not exist on type 'Event'.
!!! error TS2339: Property 'removeChildren' does not exist on type 'Event<EventTarget>'.
this.textContent = 'nope, not going to happen'
~~~~~~~~~~~
!!! error TS2339: Property 'textContent' does not exist on type 'Event'.
!!! error TS2339: Property 'textContent' does not exist on type 'Event<EventTarget>'.
}

8 changes: 4 additions & 4 deletions tests/baselines/reference/typeFromPropertyAssignment21.types
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
Event.prototype.removeChildren = function () {
>Event.prototype.removeChildren = function () { this.textContent = 'nope, not going to happen'} : () => void
>Event.prototype.removeChildren : any
>Event.prototype : Event
>Event : { new (type: string, eventInitDict?: EventInit): Event; prototype: Event; readonly AT_TARGET: number; readonly BUBBLING_PHASE: number; readonly CAPTURING_PHASE: number; readonly NONE: number; }
>prototype : Event
>Event.prototype : Event<EventTarget>
>Event : { new (type: string, eventInitDict?: EventInit): Event<EventTarget>; prototype: Event<EventTarget>; readonly AT_TARGET: number; readonly BUBBLING_PHASE: number; readonly CAPTURING_PHASE: number; readonly NONE: number; }
>prototype : Event<EventTarget>
>removeChildren : any
>function () { this.textContent = 'nope, not going to happen'} : () => void

this.textContent = 'nope, not going to happen'
>this.textContent = 'nope, not going to happen' : "nope, not going to happen"
>this.textContent : any
>this : Event
>this : Event<EventTarget>
>textContent : any
>'nope, not going to happen' : "nope, not going to happen"
}
Expand Down
1 change: 1 addition & 0 deletions tests/cases/compiler/readyStateChangeEventOnDocument.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
document.addEventListener('readystatechange', event => event.target?.readyState === 'complete'); // should not error