我想定义一个具有只读属性的接口。例如;
interface foo {
get bar():bool;
}
但是,这会在栏上出现语法错误“预期';'”。我已将VisualStudio设置为使用ES5目标,因此支持getter。这是接口的限制吗?将来可能会发生这种变化;能够做到这一点是一件非常好的事情。
正如@Vitaliy Ulantikov所回答的,您可以在属性上使用只读
修饰符。这就像一个getter。
interface Point {
readonly x: number;
readonly y: number;
}
当对象文字实现该接口时,不能覆盖只读
属性:
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
class PointClassFixed implements Point {
readonly x: number;
readonly y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x // error!
this.y = y // error!
}
}
在操场上自己看。
是的,这是对接口的限制。是否使用getter实现对属性的访问是一个实现细节,因此不应该是公共接口的一部分。另见这个问题。
如果您需要在接口中指定的只读属性,您可以添加getter方法:
interface foo {
getAttribute() : string;
}
Typecript 2.0中引入了仅Getter属性:
interface foo {
readonly bar: boolean;
}
问题内容: 查看mozilla文档,查看正则表达式示例(标题为“使用匹配结果创建数组”),我们有如下语句: 输入:一个只读属性,它反映与正则表达式匹配的原始字符串。 index:只读属性,它是字符串中匹配项的从零开始的索引。 等等…是否可以在JavaScript中创建具有只读属性的对象,或者这是对特定浏览器实现的内置类型的特权? 问题答案: 编辑: 自从编写了此答案以来,EcmaScript 5中
目前,不允许在接口中使用get/set方法(访问器)。例如: 此外,TypeScript 不允许在类方法中使用数组函数表达式:例如: 有没有其他方法可以在接口定义上使用getter和setter?
我想拆分我的验证器的声明和实现,与Spring boot环境中的这个问题非常相似。看起来好像是我让它几乎起作用了。我看到我的验证器实际上是由Spring验证调用的,但在执行验证后,Hibernate会抛出一个异常: 这是因为是一个接口(如预期)。 我已经这样配置了Spring(这是一个不同问题的答案): 我的自定义验证器: 所以它试图通过验证器名称找到一个Spring bean。所以我有一个验证器
在静态编程语言接口中,属性是否使用空get/set语句声明有关系? 例如。。。 我很难注意到不同之处。 在实现接口时,我是否为属性使用getter/setters,或者我是否直接设置值似乎并不重要。 当通过java访问它们时,都有getters,都有getter和setters。
我知道我也可以通过创建一个新文档,然后通过更新,但是这个方法需要2个写操作,而且速度也慢得多。