我知道typescript的interface
是一个Type,所以如果我定义一个接口,我可以用它来定义一个变量。我的问题是,是否有任何(预定义的)方法来复制接口的变量?例如:
interface Person {
name: string;
birthday: string;
}
let person: Person = <Person>{};
person.name = "bob";
person.birthday = "19000909";
console.dir(person);
let copyPerson: Person = <Person>{};
copyPerson = person;
copyPerson.name = "Alice";
//then the person's name is also Alice. because the reference of person is passed to copyPerson.
更改copyPerson
后,person
也会发生变化。我知道我可以将person
的每个属性分配给copyPerson
,但有没有方法可以制作单独的人员副本? (顺便说一句,如果它是课堂,我可以new
一个对象)
答案 0 :(得分:5)
您可以使用Object.assign:
let copyPerson = Object.assign({}, person);
copyPerson.name = "Alice";
console.log(person); // {name: "bob", birthday: "19000909"}
console.log(copyPerson); // {name: "Alice", birthday: "19000909"}
答案 1 :(得分:0)
克隆数组或对象:
克隆数组:
const clonedArray = Object.assign([], myArray);
克隆对象:
const clonedObject = Object.assign({}, myObject);
答案 2 :(得分:0)
刚刚遇到了同样的问题,所以我会发布我发现的帮助我的另一个问题:
如果您的对象包含子对象。当您使用Object.asign()
时,将复制子对象引用,您最终会遇到相同的问题,但只能使用子对象。
所以你必须为每个子对象使用另一个Object.assign()
,但是在父对象上使用Object.assign()
之后,它将复制引用。
您还可以使用此方法克隆对象和子对象:
let originalObject =
{
a:'a',
b:'b',
subObj:
{
c:'c',
d:'d',
},
};
//clone object
let cloneObject = {...originalObject};
//clone sub object
cloneObject.subObj = {...originalObject.subObj};
//now modification on cloneObject and its sub-object won't occure in originalObject
spread运算符也可以与数组一起使用:
let clonedArray = [...originalArray];