打字稿调用可以实现一个接口,并使vars私有吗?

时间:2014-05-22 21:34:35

标签: interface typescript

这就是我想要做的。我们在类的结构中接收JSON数据。所以我们可以按如下方式声明一个接口:

export interface IElement {
id : number;
name : string;
}

然后课程如下:

export class Element implements IElement {
    id : number;
    name : string;

constructor (src : IElement) {
    this.id = src.id;
    this.name = src.name;
    }
}

然后我们将JSON数据转换为< IElement>并将其传递给类构造函数。然后可以将构造函数传递给IElement或Element,生活也很好。

但是......我想强制访问使用getter和setter。所以我想做的是:

export class Element implements IElement {
    private id : number;
    private name : string;

constructor (src : IElement) {
    this.id = src.id;
    this.name = src.name;
    }

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

以上对我来说仍然可以正常工作,因为在构造函数中我可以访问这些变量。但是,如果将它们设置为private,则Element不再实现IElement,因为它不符合IElement中的合同。

有办法做到这一点吗?如果必须,Element不必实现IElement,但如果确实如此,它会使生活更清洁。

1 个答案:

答案 0 :(得分:1)

您的公共表面区域可以替代接口,或者不是。该类不能替代IElement(如果你想强迫人们使用getter,它不应该),因此它不能implement接口。

既然你没有说出为什么你想要人们使用getter,我不知道这是否合适,但你可以在类中使用属​​性getter:

export interface IElement {
    id: number;
    name: string;
}

export class Element implements IElement {
    private _id: number;
    private _name: string;
    constructor (src: IElement) {
        this._id = src.id;
        this._name = src.name;
    }

    get id() {
        return this._id;
    }

    get name() {
        return this._name;
    }
}