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/proposal-object-rest-spread.md.
  • English
  • Rest/Spread Properties S4

    Proposal details
    Proposal overview

    This proposal extends destructuring and object literal syntax to support rest properties and spread properties, mirroring array rest and spread. It addresses the need to easily extract remaining properties from an object or merge objects.

    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.

    Object Rest/Spread Properties for ECMAScript

    ECMAScript 6 introduces rest elements for array destructuring assignment and spread elements for array literals.

    This proposal introduces analogous rest properties for object destructuring assignment and spread properties for object literals.

    Specification

    Specification

    Rest Properties

    Rest properties collect the remaining own enumerable property keys that are not already picked off by the destructuring pattern. Those keys and their values are copied onto a new object.

    let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
    x; // 1
    y; // 2
    z; // { a: 3, b: 4 }

    Spread Properties

    Spread properties in object initializers copies own enumerable properties from a provided object onto the newly created object.

    let n = { x, y, ...z };
    n; // { x: 1, y: 2, a: 3, b: 4 }

    Transpilers

    Babel

    Bublé

    JSTransform

    TypeScript

    Status of this Proposal

    It is a Stage 4 proposal for ECMAScript.

    Known Issues

    This proposal only iterates over own properties. See why this matters.