在我的代码中,我经常需要将数据从json复制到构造函数中的实例化类。
function append(dst, src) {
for (let key in src) {
if (src.hasOwnProperty(key) {
dst[key] = src[key];
}
}
};
export class DataClass {
id: number;
title: string;
content: string;
img: null | string;
author: string;
// no methods, just raw data from API
}
export class AdoptedClass1 extends DataClass {
// has same fields as DataClass
showcase: string;
constructor (data: DataClass) {
append(data, this);
// do some stuff
}
}
// similar code for AdoptedClass2
我想知道我是否可以使用对象扩展运算符替换构造函数中的append函数调用
答案 0 :(得分:2)
根据您的需要,我宁愿使用Object.assign(this, data)
而不是您定制的append
功能。不过,请查看documentation以了解它的局限性。
回到主要问题:无法使用点差运算符执行您想要的操作。许多人对此功能感兴趣,但已被搁置,因为您可以看到here。
为了更接近您的要求,我们可以稍微重构您的代码:
export class DataClass {
id: number
title: string
content: string
img: null | string
author: string
constructor(data: DataClass) {
Object.assign(this, data)
}
}
export class AdoptedClass1 extends DataClass {
showcase: string
constructor (data: DataClass) {
super(data)
// do some stuff
}
}
只需将constructor
添加到数据类中,您就可以在子项中使用super(data)
,而恕我直言,代码将更加清晰。
答案 1 :(得分:1)
您可以通过替换此行来使用对象扩展运算符:
append(data,this)
这一行
data = {...data, ...this};