TypeScript 2.1 为我们带来了对象休息和传播,以轻松解构、制作浅拷贝并将对象合并到新对象中。
对象传播
创建对象的浅拷贝:
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};
const newNames = { ...names };
console.log(newNames.cat); // Bob
您可以将多个对象合并为一个新对象:
const names1 = {cat: 'Bob'};
const names2 = {dog: 'Fred', alligator: 'Benedict'};
const newNames = { ...names1, ...names2 };
console.log(newNames.alligator); // Benedict
您也可以添加新属性,以及使用传播:
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};
const newNames = { ...names, hamster: 'Jude' };
console.log(newNames.hamster); // Jude
请注意,如果一个属性最终被多次插入,则最后一个获胜:
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};
const newNames = { dog: 'Skip', ...names };
console.log(newNames.dog); // Fred
对象休息
类似于我们已经在纯 JavaScript 中使用 object destructuring 所做的事情,rest 为我们带来了 ES2017 管道中的一些东西:
const names = {cat: 'Bob', dog: 'Fred', alligator: 'Benedict'};
const { cat, ...otherAnimals } = names;
console.log(cat); // Bob
console.log(otherAnimals); // {dog: 'Fred', alligator: 'Benedict'}