使用具有此关键字的Typescript对象扩展运算符

时间:2017-06-12 09:31:11

标签: typescript2.0

在我的代码中,我经常需要将数据从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函数调用

2 个答案:

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