如何将扩展运算符与“ this”一起使用?

时间:2018-08-09 17:14:19

标签: node.js typescript spread-syntax

我正在TypeScript中定义一个类。 因此,使用传播算子,我可以发出以下内容:

class Foo {
  constructor(data: IDataStructure){
      const { ...k } = data; // and then k has taken over all the properties of data. Great!
  }

  public render () {

    return(<div/>

   );
  }
}

现在,我想做同样的事情,但是不想将属性放在k中,而是放在正在创建的当前对象中。即我想做类似const { ...this } = data;的事情,在Typescript中有什么聪明的方法吗?

1 个答案:

答案 0 :(得分:3)

您不能使用传播将属性添加到现有的 对象中。目前没有语法的方式;而是使用Object.assign

Object.assign(this, data);

示例(在JavaScript中)

class Example {
    constructor(data) {
        Object.assign(this, data);
    }
}
const e = new Example({answer: 42});
console.log(e.answer); // 42

请注意,Object.assign对属性进行了浅拷贝。因此,如果data的属性之一引用一个对象,则会复制该 reference ,并且datathis都将引用同一对象:

const data = {
    answer: 67,
    obj: {
        prop: "value"
    }
};
Object.assign(this, data);
console.log(this.obj === data.obj); // true, it's a shallow copy, they both refer
                                    // to the same object

如果您需要 deep 副本,而复制data也可以复制data.obj,请参见this question's answers