Object Spread and Rest

TypeScript 2.1 brings support for ES2017 Spread and Rest.

Similar to array spread, spreading an object can be handy to get a shallow copy:

  1. let copy = { ...original };

Similarly, you can merge several different objects.In the following example, merged will have properties from foo, bar, and baz.

  1. let merged = { ...foo, ...bar, ...baz };

You can also override existing properties and add new ones:

  1. let obj = { x: 1, y: "string" };
  2. var newObj = {...obj, z: 3, y: 4}; // { x: number, y: number, z: number }

The order of specifying spread operations determines what properties end up in the resulting object;properties in later spreads “win out” over previously created properties.

Object rests are the dual of object spreads, in that they can extract any extra properties that don’t get picked up when destructuring an element:

  1. let obj = { x: 1, y: 1, z: 1 };
  2. let { z, ...obj1 } = obj;
  3. obj1; // {x: number, y: number};