TypeScript:在构造函数内部和外部声明变量有什么区别?

Hos*_*rad 5 javascript typescript

假设我有一个用 TypeScript 编写的类,如下所示:

class Messenger { 
    x = 10;
    constructor(){
      this.y = 20;
    }
};
Run Code Online (Sandbox Code Playgroud)

JavaScript 版本将如下所示:

var Messenger = (function () {
    function Messenger() {
        this.x = 10;
        this.y = 20;
    }
    return Messenger;
}());
;
Run Code Online (Sandbox Code Playgroud)

x 和 y 变量在 JavaScript 中被编译为相同的东西,那么这里有什么区别呢?

谢谢。

Luk*_*itz 0

它确实可以编译,但是编译器应该给您一条错误消息,表明 y 不是 Messenger 类的一部分:

constructor(){
  this.y = 20;
}
Run Code Online (Sandbox Code Playgroud)

然而,无论错误如何,编译器通常都会进行编译,除非您在tsconfig.json. 然而,有一种方法可以在构造函数内部声明变量,但它不是在主体中,而是在参数列表中。像这样:

 constructor(public y: number){}
Run Code Online (Sandbox Code Playgroud)

要么放在他们面前private,要么public放在他们面前。这样,变量就会自动设置为您插入构造函数中的任何内容,而无需执行任何操作this.y = y;。这是创建变量的非常简单的方法,您将始终将其插入到构造函数中。

您甚至可以给出一个默认参数,如果您不向构造函数中插入任何参数,该参数将起作用:

 constructor(public y = 20){}
Run Code Online (Sandbox Code Playgroud)

查看这篇文章以获取更多信息。