Typescript接口变量clone

时间:2017-05-07 20:10:57

标签: typescript interface

我知道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一个对象)

3 个答案:

答案 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];