在Typescript documentation on interfaces的“类类型”下,给出以下示例:
interface ClockInterface {
currentTime: Date;
}
class Clock implements ClockInterface {
currentTime: Date = new Date();
constructor(h: number, m: number) { }
}
紧接在“ class Clock ...”下的以“ currentTime:...”开头的行似乎暗示着,如果我执行var something = new Clock()
,我的something
变量将具有{{1} }属性可以访问,即currentTime
。
由于the MDN documentation on Javascript Classes中的以下一行,这使我感到困惑:
实例属性必须在类方法内部定义
他们给出的示例:
something.currentTime
含义是以下代码无效:
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
我的困惑:Typescript文档中的示例代码未在构造函数中分配currentTime。他们的示例中是否缺少该步骤,或者它们的语法是否暗示“顺便说一句,直接在类上定义的属性在构造函数中被赋予了神奇的值?”如果是这样,如果您自己“手动”在构造函数中设置给定值,会发生什么情况?
答案 0 :(得分:1)
class Clock implements ClockInterface {
currentTime: Date = new Date();
constructor(h: number, m: number) { }
}
运行构造函数,然后将所有分配了默认值的属性连接起来,以便在调用构造函数后分配currentTime。
这允许类似
的语法class MyClass {
myProperty = this.myService.serviceProperty;
constructor(private myService: Myservice) {}
}
将构造函数参数标记为私有,受保护或公共自动将其分配为类的属性,而您无需这样做
this.property = paramater
在构造函数中。 TypeScript语法与JavaScript有所不同,但是一旦您习惯它就很棒了。