Typescript是否在类构造函数中设置接口属性?

时间:2019-05-30 22:00:23

标签: javascript typescript class

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。他们的示例中是否缺少该步骤,或者它们的语法是否暗示“顺便说一句,直接在类上定义的属性在构造函数中被赋予了神奇的值?”如果是这样,如果您自己“手动”在构造函数中设置给定值,会发生什么情况?

1 个答案:

答案 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有所不同,但是一旦您习惯它就很棒了。