在 TypeScript 中使用 Object.assign()
要在 TypeScript 中使用 Object.assign()
方法,请将目标对象作为第一个参数传递给该方法和一个或多个源对象,例如 const result = Object.assign({}, obj1, obj2)
。 该方法会将属性从源对象复制到目标对象。
const obj1 = { name: 'Jiyik' };
const obj2 = { country: 'China' };
// 👇️ const result: { name: string; } & { country: string; }
const result = Object.assign({}, obj1, obj2);
console.log(result); // 👉️ {name: 'Jiyik', country: 'China'}
我们使用 Object.assign
方法将两个源对象合并为一个目标对象。
该方法采用的第一个参数是目标对象,源对象的属性应用于该目标对象。
下一个参数是源对象 - 包含要应用于目标的属性的对象。
在示例中,我们传递了一个空对象作为目标,因为您通常应该避免改变对象,因为它会引入混淆。
例如,我们可以将 obj1 作为目标,将 obj2 作为源。
const obj1 = { name: 'Jiyik' };
const obj2 = { country: 'China' };
// 👇️ const result: { name: string; } & { country: string; }
const result = Object.assign(obj1, obj2);
console.log(result); // 👉️ {name: 'Jiyik', country: 'China'}
console.log(obj1); // 👉️ {name: 'Jiyik', country: 'China'}
// ⛔️ Error: Property 'country' does not
// exist on type '{ name: string; }'.ts(2339)
console.log(obj1.country);
上述代码示例会产生错误
请注意,目标对象已更改。
这在使用 TypeScript 时尤其成问题,因为 obj1 已更改,但其类型仍为 {name: string}
,即使该对象也包含 country 属性。
就是为什么您经常会看到一个空对象作为第一个参数传递给
Object.assign
方法的原因。
TypeScript 使用intersection 类型来键入 Object.assign()
方法的返回值。
const obj1 = { name: 'Jiyik' };
const obj2 = { country: 'China' };
// 👇️ const result: { name: string; } & { country: string; }
const result = Object.assign({}, obj1, obj2);
console.log(result); // 👉️ {name: 'Jiyik', country: 'China'}
换句话说,返回值的类型包含我们传递给 Object.assign
方法的所有对象的所有成员。
当我们对具有相同属性的对象使用 Object.assign
方法时,这些属性将被参数列表中稍后出现的对象覆盖。
const obj1 = { name: 'Jiyik' };
const obj2 = { name: 'Fql' };
// 👇️ const result: { name: string; } & { name: string; }
const result = Object.assign({}, obj1, obj2);
console.log(result); // 👉️ {name: 'Fql'}
console.log(result.name); // 👉️ "Fql"
示例中的两个对象都具有 name 属性,因此后面按参数顺序传递的对象获取。
我们还应该考虑使用扩展语法 (...)
作为 Object.assign
的替代品
const obj1 = { name: 'Jiyik' };
const obj2 = { country: 'China' };
// 👇️ const result: {country: string;name: string;}
const result = { ...obj1, ...obj2 };
console.log(result); // 👉️ {name: 'Jiyik', country: 'China'}
扩展语法 (...)
将对象的属性解包到一个新对象中。
与使用
Object.assign()
方法相比,TypeScript 正确键入新对象要容易得多。
这通常是一种更好的方法,因为您不会因为忘记提供一个空对象作为 Object.assign
方法的第一个参数并无意中就地改变对象而使自己陷入困境。
我们可以根据需要将任意数量的对象解包到一个新对象中,如果两个对象具有相同的属性,则后面出现的对象获胜。
const obj1 = { name: 'Jiyik' };
const obj2 = { name: 'Fql' };
// 👇️ const result: {name: string;}
const result = { ...obj1, ...obj2 };
console.log(result); // 👉️ {name: 'Fql'}
这两个对象都具有 name 属性,因此后一个对象获胜。
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。