microsoft / microsoft/TypeScript

Symbol = LiveSymbol | DeadSymbol

Offen
#59,574 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

🔍 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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das motivierende WeakMap-Beispiel und die ECMAScript-Regeln zu prüfen, die zwischen lebenden und toten Symbolen unterscheiden. Verfolge, wie TypeScript Symbole repräsentiert und WeakMap-Schlüssel überprüft, und ermittle anschließend die Änderungen am Typsystem und die erforderlichen Tests, damit ungültige Schlüssel mit toten Symbolen abgelehnt werden, ohne das erzeugte JavaScript zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, typescript
Bereich
compilers, devtools
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.