基于现有对象在 typescript 中创建新对象

omvjsjqw  于 2023-02-10  发布在  TypeScript
关注(0)|答案(2)|浏览(136)

在TypeScript中,我有一个基本对象作为模板,我想复制该对象,只更改一个属性,如下所示:

interface user {
    name: string, 
    jobTitle: string
}

const employee: user = {name: 'Liane', jobTitle: 'Web Dev'}

const newEmployee1 = employee;
newEmployee1.name = 'James';
const newEmployee2 = employee;
newEmployee2.name = 'John';

但是,当我在控制台中查看结果时,每个员工的姓名都是“John”,如下所示:

{name: 'John', jobTitle: 'Web Dev'}
{name: 'John', jobTitle: 'Web Dev'}
{name: 'John', jobTitle: 'Web Dev'}

我知道这是由于对象引用,但是我不想引用基础员工,我想克隆它作为独立于其他用户的自己的对象。所以当我控制台记录对象时,我会得到:

{name: 'Liane', jobTitle: 'Web Dev'}
{name: 'James', jobTitle: 'Web Dev'}
{name: 'John', jobTitle: 'Web Dev'}

有什么办法能让我这么做吗?

ezykj2lf

ezykj2lf1#

如果你想克隆一个已有的对象,我建议你使用“spread operator”

// interface user {
//     name: string, 
//     jobTitle: string
// }

// const employee: user = {name: 'Liane', jobTitle: 'Web Dev'}
const employee = {name: 'Liane', jobTitle: 'Web Dev'}

const newEmployee1 = {
  ...employee,
  name: 'James'
};

const newEmployee2 = {
  ...employee,
  name: 'John'
};

console.log(employee)
console.log(newEmployee1)
console.log(newEmployee2)
ut6juiuv

ut6juiuv2#

最简单的方法是使用扩展运算符:

const newEmployee1 = {
  ...employee,
  name: 'James',
};
const newEmployee2 = {
  ...employee,
  name: 'John',
};

或者使用Object.assign()

const newEmployee1 = Object.assign({}, employee);
newEmployee1.name = 'James';

const newEmployee2 = Object.assign({}, employee);
newEmployee2.name = 'John';

请记住,这两个值都不是深度克隆,并且非基元值共享相同的引用。

相关问题