Javascript 类与打字稿类

ann*_*123 11 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");
Run Code Online (Sandbox Code Playgroud)

这是给我的等价物

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");
Run Code Online (Sandbox Code Playgroud)

现在,我有三个问题

  1. 什么是@class(或 js 中的一般@)? var User = /** @class */ (function () {

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

  3. 在 TS 课上我们可以做这样的事情

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

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

Twi*_*her 6

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


Jos*_*igo 5

回答您的问题:

  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');
Run Code Online (Sandbox Code Playgroud)