我正在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中有什么聪明的方法吗?
答案 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 ,并且data
和this
都将引用同一对象:
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。