microsoft / microsoft/TypeScript

Incorrect class #private fields initialization order with target ES2022 and useDefineForClassFields set to false

Aperta
#54,206 14 commenti 1 reazione 1 assegnatario Vedi su GitHub

@rbuckton ci sta già lavorando.

Dal 10/5/2023.

Needs Investigation
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

Bug Report

🔎 Search Terms

ES2022 class field initialization order
private fields order
useDefineForClassFields false

🕗 Version & Regression Information
  • This changed between versions 4.9.5 and 5.0.4
⏯ Playground Link

5.0.4 with runtime error (useDefineForClassFields: false, target: ES2022)

4.9.5 without runtime error (useDefineForClassFields: false, target: ES2022)

💻 Code
class Buzz {
    wow = 'one'
}

class Foo { 
    #bar = this.buz.wow;
    constructor(private buz: Buzz) {}
}

new Foo(new Buzz())
🙁 Actual behavior

With 5.0.4 and useDefineForClassFields: false, target: ES2022 the above code fails in runtime because #bar = this.buz.wow; stays initialized before constructor, this doesn't happen if "normal private" is used (private bar = this.buz.wow;). Such construct works without issues on 4.9.5.

🙂 Expected behavior

The initialization is done in the same way as on 4.9.5.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.