在body和constructor中设置变量之间的Typescript差异

时间:2017-10-24 14:11:41

标签: typescript

之前可能已经提到这是一个简单的问题,但谷歌搜索类似于标题的东西并没有把我带到任何地方。我不确定如何正确地说出这个问题,所以如果有人能让我知道正确的条款和资源来回答这个问题也很好。

在TypeScript中,分配给类体中的变量有什么区别,如下所示:

export class Test1 {
  var1 = 5;
}

并在构造函数中指定值,如下所示:

export class Test2 {
  constructor() {
    this.var1 = 5;
  }

  var1: number;
}

使用一个比另一个更好吗?在某些情况下,有必要使用一个而不是另一个吗?

3 个答案:

答案 0 :(得分:2)

让我们看看生成的javascript代码(没有缩小):

var Test1 = (function () {
    function Test1() {
        this.var1 = 5;
    }
    return Test1;
}());

var Test2 = (function () {
    function Test2() {
        this.var1 = 5;
    }
    return Test2;
}());

它是一样的。

只要简单地为实例变量分配硬编码基元类型,就可以在类的主体中安全地分配它们。如果您有复杂的逻辑或者如果您需要在初始化之前初始化一个变量,那么为了清楚起见,最好在构造函数中执行它。

答案 1 :(得分:1)

属性初始值设定项的发出代码只是构造函数开头的赋值,因此它们在运行时特征方面完全等效。

当属性之间没有依赖关系时,最好只使用初始化程序语法。 TypeScript不会强制执行任何特定的排序,也不会为您重新排序初始化程序,因此在强制排序时在构造函数中编写初始化代码会更清楚地表明不应该重新排序成员。

答案 2 :(得分:0)

这两者之间没有区别,因为无论你添加什么作为变量id进入构造函数,如果你看到它的java脚本转换,你会更好地理解它。

Example in Typscript playground

更好的是,您应该在构造函数中分配变量,它将是运行时可分配的,并且更好地理解。