microsoft / microsoft/TypeScript

Symbol = LiveSymbol | DeadSymbol

Ouverte
#59,574 6 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

🔍 Search Terms

symbol weakmap TC39

✅ Viability Checklist
⭐ Suggestion

The latest version of ES creates a new kind of runtime error. It allows symbols to be used as weak map keys, but only some symbols. In particular it splits the symbol primitive in two. One one hand are "live" symbols, tracked by the garbage collector, and usable as weak map keys. Symbol() creates a live symbol. On the other had are "dead" symbols, such as Symbol.iterator, which return some value from Symbol.keyFor(sym) and are not legal keys for weak maps.

Since there are now fundamentally two incompatible primitive types, TS should adjust so that it is capable of catching these errors again.

📃 Motivating Example
const protos = new WeakMap();

const sym = Math.random() > 0.5 ? Symbol() : Symbol.for('me');

protos.set(sym, null); // crashes half the time
💻 Use Cases

Catching more errors

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 examiner l’exemple motivant de WeakMap et les règles d’ECMAScript qui distinguent les symboles vivants des symboles morts. Suivez la manière dont TypeScript représente les symboles et vérifie les clés de WeakMap, puis déterminez les changements du système de types et les tests nécessaires pour que les clés invalides utilisant des symboles morts soient rejetées sans modifier le JavaScript généré.

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

Évaluation

Stack technique
javascript, typescript
Domaine
compilers, devtools
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

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