打字稿 - 为什么要重写所有成员来实现接口?

时间:2017-03-15 14:00:52

标签: oop inheritance typescript interface

我有一个带有一些可选变量的接口,如:

interface A {
    id: string;
    name?: string;
    email?: string;
    ...
}

我想做的是

class B implements A {
    constructor(x: string, y: string, ...) {
        this.id = x;
        this.name = y;
        ...
    }

    getName(): string {
        return this.name;
    }
}

我不想重写我将使用的所有成员,我需要一些成员保持可选。每个接口只用一个类实现,所以如果我重写class B中的所有成员而不是interface A变得无用。

你可能会问"为什么你还需要interface A?"。我需要它,因为我在其他项目中使用它,我必须extendimplement使用一些函数。

关于该实施的任何解决方案或不同的想法?

1 个答案:

答案 0 :(得分:0)

一种选择是使用Object.assign,如下所示:

interface A {
    id: string;
    name?: string;
    email?: string;
}

class B implements A {
    id: string;
    name: string;
    email: string;

    constructor(data: A) {
        Object.assign(this, data);
    }

    getName(): string {
        return this.name;
    }
}

code in playground