我想用readonly属性定义一个接口。例如;
interface foo {
get bar():bool;
}
但是,这会在语法上出现语法错误,“expected';'”。我已将VisualStudio设置为使用ES5目标,因此支持getter。这是接口的限制吗?未来可能会发生这种变化;这是一件非常好的事情。
答案 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中亲自查看。