URL: https://www.progressiverobot.com/typescript-object-rest-spread/

TypeScript 2.1 brings us object rest & spread to easily destructure, make shallow copies and merge objects into new ones.

Object Spread

object rest illustration for: Object Spread

Create shallow copy of objects:

				
					
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};



const newNames = { ...names };



console.log(newNames.cat); // Bob

				
			

You can merge multiple objects into a new object:

				
					
const names1 = {cat: 'Bob'};

const names2 = {dog: 'Fred', alligator: 'Benedict'};



const newNames = { ...names1, ...names2 };



console.log(newNames.alligator); // Benedict

				
			

You can add new properties too, along with using a spread:

				
					
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};



const newNames = { ...names, hamster: 'Jude' };



console.log(newNames.hamster); // Jude

				
			

Note that if a property ends up being inserted multiple times, the last one in wins:

				
					
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};



const newNames = { dog: 'Skip', ...names };



console.log(newNames.dog); // Fred

				
			

Object Rest

Similar to what we can already do in pure JavaScript with object destructuring, <^>rest<^> brings us something that's in the pipelines for ES2017:

				
					
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};



const { cat, ...otherAnimals } = names;



console.log(cat); // Bob

console.log(otherAnimals); // {dog: 'Fred', alligator: 'Benedict'}