是否可以在TypeScript接口中使用getter / setter?

时间:2012-10-11 17:08:41

标签: typescript

我想用readonly属性定义一个接口。例如;

interface foo {
    get bar():bool;
}

但是,这会在语法上出现语法错误,“expected';'”。我已将VisualStudio设置为使用ES5目标,因此支持getter。这是接口的限制吗?未来可能会发生这种变化;这是一件非常好的事情。

3 个答案:

答案 0 :(得分:61)

Typescript 2.0中引入了仅限Getter的属性:

interface foo {
    readonly bar: boolean;
}

答案 1 :(得分:21)

是的,这是接口的限制。是否使用getter实现对属性的访问是一个实现细节,因此不应该是公共接口的一部分。另请参阅this question

如果需要在接口中指定readonly属性,可以添加getter方法:

interface foo {
    getAttribute() : string;
}

答案 2 :(得分:0)

正如@Vitaliy Ulantikov回答的那样,您可以在属性上使用this.form.get('IdGroup').get('Nbrs').setValue([123,2456]); component.Enabled.subscribe((value) => { fixture.detectChanges(); expect(value).toBeTruthy(); }); 修饰符。这就像吸气剂一样。

readonly

对象文字实现该接口时,您无法覆盖interface Point { readonly x: number; readonly y: number; } 属性:

readonly

但是,当 class 实现该接口时,无法避免覆盖它。

let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!

我想是因为当您在类定义中重新声明属性时,它们会覆盖接口的属性,并且不再是只读的。

要解决此问题,请直接在实现该接口的类中的属性上使用class PointClassBroken implements Point { // these are required in order to implement correctly x: number; y: number; constructor(x: number, y: number) { this.x = x this.y = y } changeCoordinates(x: number, y: number): void { this.x = x // no error! this.y = y // no error! } }

readonly

playground中亲自查看。