Side effect of decorator

Offen
#56,000 9 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@rbuckton arbeitet bereits daran.

Seit 05.10.2023.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Beschreibung

Bug Domain: Decorators Needs Investigation
🔎 Search Terms

"decorator" "field decorator" "side effect" "decorator side effect"

🕗 Version & Regression Information
  • This changed between versions 5.0 and 5.2
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about decorators
⏯ Playground Link

https://www.typescriptlang.org/play?#code/MYewdgzgLgBAYgSwKYBsAmARJoBOBDKEHGAXhgAoo8cBzJKALhgFcw0kAzBMJNAGhigwUJAA9GMAMIo8ECIlSZsRAkUngR4gJSkAfDADeAXwBQJ4DLkwACtSTDDJmIPDQczYIRzlqNAIxMbtw0Ar4ATIFQOMGhtADMkdFgNDoGTs4wAPSZMAACUBAAtAg0YERI6c5QABYIEAB0AA44II1+pDC+fpVZOflFJWU4FRkwNXVNLY1hHeE92XkFxaXlPeMNza1xs-Hpps6bbQCEicFmB1NhJzBByecwh3HXtzQmpuaWEFK16DBiImwvrZhg40hdWn5nlEzulDldTnd0rkFOgsLhVDhYVMngjXu8hNBOh0eAB3b4IdDkADkfj8VIEVLCYXpMCpcTiVK05lcIBQSHqKBANB8XIWeEmENIJDIrHYXB4aF6MAA6gAVOAmMUS6ZSsiM5lKgDyAGlNTlxY9dSw2JxuLwlWqNUA

💻 Code
const FieldDecorator = (target: undefined, context: ClassFieldDecoratorContext) => {} // do nothing

class Parent {
  constructor(arg1: string, arg2: string, arg3: string) {
    // @ts-ignore
    this.prop1 = arg1
    // @ts-ignore
    this.prop2 = arg2
    // @ts-ignore
    this.prop3 = arg3
  }
}

class Child extends Parent {
  prop1!: string

  prop2!: string

  @FieldDecorator
  prop3!: string
}

const a = new Child('11', '22', '33')
console.log(a)
// a.prop1 === undefined // WTF
// a.prop2 === '22' // OK
// a.prop3 === undefined // WTF

🙁 Actual behavior

the decorated property and the very first property are undefined despite the fact that they are given a value in the constructor

🙂 Expected behavior

a object should be equal to the following obj object

const obj = {
    prop1: "11"
    prop2: "22"
    prop3: "33"
} 
Additional information about the issue

No response

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus microsoft/TypeScript

Alle Issues in microsoft/TypeScript

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

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