For AI agents: the complete documentation index is available at /tc39-atlas/en/llms.txt, the full documentation bundle is available at /tc39-atlas/en/llms-full.txt, and this page is available as Markdown at /tc39-atlas/en/proposals/stage/2/proposal-destructuring-private.md.
  • English
  • Destructure Private Fields S2

    Proposal details
    Proposal overview

    This proposal enables destructuring private fields, allowing developers to extract private class fields into local variables using syntax like const { #x: x } = this. It avoids reification issues by being syntax-only and excludes shorthand syntax following committee decisions.

    Note

    The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.

    proposal-destructuring-private

    A proposal to integrate private fields and destructuring.

    class Foo {
      #x = 1;
    
      constructor() {
        console.log(this.#x); // => 1
        
        const { #x: x } = this;
        console.log(x); // => 1
      }
    
      equals({ #x: otherX }) {
        const { #x: currentX } = this;
        return currentX === otherX;
      }
    }

    Champions

    Status

    Current Stage: 2

    Motivation

    Destructuring is a popular feature to store local references to an object's properties. Private Field's proposal targeted the minimum features needed to support the goal of private properties in class instances. Unfortunately, this left destructuring out.

    This proposal avoids questions of reification of Private Fields by limiting this to syntax only. It also doesn't need to worry about "shorthand" syntax (#x in an expression being shorthand for this.#x), because the Committee has decided we will not persue shorthand syntax after the Ergonomic Brand Checks Proposal.