microsoft / microsoft/TypeScript

Object literal getters and setters doesn't work after spread syntax (ES2017 and below)

Offen
#45,531 2 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: JS Emit Rescheduled
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

The getters/setters will become normal/plain properties if a spread assignment is used before them.

🔎 Search Terms

Getter, setter, spread

🕗 Version & Regression Information

4.3.5

⏯ Playground Link

Playground link with relevant code

💻 Code
var Foo = {
    key: 'value'
}
var Bar = {
    ... Foo,  // this breaks the getters/setters after it.    
    get name() { console.log(9); return this._name },
    set name(name) { this._name = `1${name}`},
    _name: '',
}
🙁 Actual behavior

name setter and getter on the Bar object are “removed” and replaced with a plain name property, given that after compilation, the method used is Object.assign to piece the objects together.

🙂 Expected behavior

Getters and setters on Bar should still remain.

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 mit dem verlinkten Playground und dem Beispiel für Spread in Objektliteralen, und untersuche dann das ES2017-and-below-Emit, das Object.assign verwendet. Vergleiche das generierte Verhalten mit dem erwarteten Getter- und Setter-Verhalten; fertig ist es, wenn die Accessors auf Bar nach der Kompilierung funktionsfähig bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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