Javascript类与Typescript类

时间:2019-02-23 12:06:30

标签: javascript typescript

我是TypeScript和Javascript类的新手!

我正在学习TypeScript,在那里我创建了像这样简单的内容

class User {
  name: string;
  email: string;

  constructor(name: string, email: string) {
    this.name = name;
    this.email = email;
  }
}

let newUser = new User("Rohit Bhatia", "iro@gmail.com");

这是等价的

var User = /** @class */ (function () {
    function User(name, email) {
        this.name = name;
        this.email = email;
    }
    return User;
}());
var newUser = new User("Rohit Bhatia", "iro@gmail.com");

现在,我有三个问题

  1. @class是什么(在js中通常是@)? var User = /** @class */ (function () {

  2. 类也在javascript中吗?那么为什么不使用打字稿将其转换为JS类

  3. 在TS类中,我们可以做这样的事情

    班级用户{   名称:字符串;   电子邮件:字符串;

但是在Javascript中我们不能做这样的事情吗?或JS类和TS类之间有什么区别

3 个答案:

答案 0 :(得分:2)

  1. / ** @class * /只是评论
  2. Typescript的默认目标是ES5,因此它将转换为JS代码,可以在与IE11相同的浏览器上执行。如果将ES6设置为目标,您会注意到将使用JS类
  3. ES5编写类的方法是使用函数作为构造函数,但是执行代码时的结果与ES6类完全相同

答案 1 :(得分:1)

回答您的问题:

  1. @Class是一种与标准无关的注释/注释。

  2. 在ES5中(不说是“经典javascript”),没有类,但是有一种模拟其行为的方法,即使将Typescript代码转换为ES5也是如此。与新规范相比,以这种方式编码“类”(记住没有)是很困难的。

  3. 它也是答案2。另外:

是现代Javascript ECMAScript 6规范(ES6)的一部分,现在Javascript具有类。 Typescript是ES6的一种演变。在ES6中,它是这样的:

class User {

  constructor(name, email) {
    this.name = name;
    this.email = email;
  }
}

var newUser = new User('Rohit Bhatia', 'iro@gmail.com');

答案 2 :(得分:1)

我正在回答第三个问题。

  1. 在 Ecmascript 标准中,/* 和 */ 之间只是一个 评论,但打字稿转译器或调试器可能 将此注释用于更多用途。
  2. 正如其他人所说 答案,默认情况下是 Ecmascript 5 (ES5) 的 typescript 转译,对于 与旧浏览器更好的兼容性,这是一种方法 类似于 ES5 中的类。
  3. ES6 类类似于 typescript 类,但 typescript 也有 public/protected/private 修饰符,在 ES6 类中没有。此外,在打字稿中你 将通过更强的类型获得优势,其中包括甚至 在某些编辑器中更好的自动完成(如 Visual Studio Code, 当然这取决于编辑器)。