Skip to content

Missing parameter properties when using class with private fieldsΒ #48771

Closed
@jlusty

Description

@jlusty

Bug Report

πŸ”Ž Search Terms

Parameter properties
Private fields
Class constructor
Destructuring assignment

πŸ•— Version & Regression Information

  • This changed between versions 4.5.5 and 4.6.2
  • Working in 4.6.0-dev.20220113
  • Broken in 4.6.0-dev.20220114, 4.6.0-beta and later (still broken on nightly)

I think this means the breaking change was made in #29374.

⏯ Playground Link

https://www.typescriptlang.org/play?ts=4.6.0-dev.20220114#code/KYDwDg9gTgLgBAE2AMwIYFcA28DGnUDOBcAwvkQLICWRVAdgOYBiVwmCcA3gLABQcAuFGCoEEOpgCecAMRgoVAG6oYwFmwQAuOARgLGAbj59BcHON1R0OGNAAUJ04NRQG2znADWwSdsv0GOABfABpHJzgwdAAjTCocOFBIAmAEdXZtOnQAW2jgKHC4AEouQtM7D29fOBgACxoAOjkFZVV0jiC4AF44FwYio35BIOMhgUwIBjsSnjGnczoCCExgBompusbmpRU1VnYBssEFpZW1ybtNggakiBS0-YRDuZHeIKA

πŸ’» Code

export default class ClassMissingField {
    readonly #privateField: string;

    constructor(
        arg: { key: string },
        public exposedField: number
    ) {
        ({ key: this.#privateField } = arg);
    }

    log() {
        console.log(this.#privateField);
        console.log(this.exposedField);
    }
}

πŸ™ Actual behavior

exposedField not set as a property on ClassMissingField, even though it should be via the parameter property. This is the minimal example I could find - it seems to need a private field with a destructuring assignment.

πŸ™‚ Expected behavior

exposedField should be set as a property on ClassMissingField using parameter properties.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions