microsoft / microsoft/TypeScript

Event of type `"error"` incorrectly typed as ErrorEvent even when it's not actually ErrorEvent in practice

Ouverte
#54,040 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Awaiting More Feedback Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

Bug Report

🔎 Search Terms

ErrorEvent error capture

🕗 Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ for entries about events

⏯ Playground Link

Playground link with relevant code

💻 Code
const scriptElement = document.createElement('script');
scriptElement.addEventListener('error', event => {
  console.log(`1. script element error event constructor: ${event.constructor.name}`);
});
scriptElement.src = 'https://example.com/nonExistentScript.js';

const linkElement = document.createElement('link');
linkElement.addEventListener('error', event => {
  console.log(`2. link element error event constructor: ${event.constructor.name}`);
});
linkElement.rel = 'stylesheet';
linkElement.href = 'https://example.com/nonExistentStylesheet.css';

window.addEventListener('error', event => {
  console.log(`3. window error event constructor: ${event.constructor.name}`);
});

window.addEventListener('error', event => {
  console.log(`4. window error (with capture) event constructor: ${event.constructor.name}`);
}, {
  capture: true
});

document.head.appendChild(scriptElement);

document.head.appendChild(linkElement);

throw new Error('Uncaught Error');
🙁 Actual behavior

For the above code, the TypeScript compiler types each event callback parameter as ErrorEvent, even though that's not always the type at runtime

Note that the linked playground doesn't show the log messages for the uncaught Error case; here's the full log output:

3. window error event constructor: ErrorEvent
4. window error (with capture) event constructor: ErrorEvent
4. window error (with capture) event constructor: Event
2. link element error event constructor: Event
4. window error (with capture) event constructor: Event
1. script element error event constructor: Event
🙂 Expected behavior

I don't know enough about the DOM "error" event to know what a complete solution would be, but ideally, in the code above, I guess the type for event would be:

  1. Event
  2. Event
  3. ErrorEvent (assuming window non-capture event dispatches of type "error" are always ErrorEvent, which I don't know)
  4. ErrorEvent | Event

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le TypeScript Playground lié et les typages des écouteurs d’événements DOM "error" concernés dans les exemples. Comparez les types de paramètres de callback inférés avec les constructeurs consignés à l’exécution pour les événements script, link et window, puis assurez-vous que les types obtenus représentent correctement ces cas.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, typescript
Domaine
frontend, web-dev
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.