JavaScript 与 TypeScript:深入比较
一个我经常被问到的问题是:JavaScript 和 TypeScript 之间有什么区别? 让我们一起来探索一下这两个编程语言。
JavaScript (JS) 自您开始编写代码以来就一直是所有前端项目的重要组成部分。如果您对 JS 有一些了解,那么可以将 TypeScript 看作是 JS 的增强版本,它添加了一些额外的特性,使您的应用程序更加规范且具有类型定义。TypeScript 是微软开发的一个开源项目,其主要目标是提高 JS 开发的效率,并在编译阶段尽早发现错误。
在本文中,我们将深入探讨 JavaScript 和 TypeScript 的一些关键特性,并对比分析这两种脚本语言之间的差异。
什么是 JavaScript?
JavaScript 主要用于客户端脚本编写。您可以在 HTML 页面中直接嵌入脚本,或者创建扩展名为 .js 的文件,然后在 HTML 文件中引用它。JavaScript 的一个典型应用场景是登录页面验证,例如,当您输入的用户名或密码不正确时,页面会显示错误提示。
让我们来看一个简单的 JS 代码示例,并在浏览器中运行它:
首先,创建一个名为 example.html 的文件,并在其中添加以下代码:
<script> feeling = 'happy'; feeling = 23; </script>
这段简单的代码声明了一个变量,并首先赋予它一个字符串值 “happy”。 随后,我们又为同一个变量赋予了一个数字值。JavaScript 不会对此报错,我们可以在任何浏览器上运行这段代码,而不会遇到任何问题。接下来,我们尝试从用户获取 feeling 的值:
我们的 HTML 代码可能如下所示:
<input type="textbox" id="howyoufeel">
相应的 JavaScript 代码如下:
feeling = document.getElementById("howyoufeel").value;
除非我们在脚本中进行明确的类型检查,否则 JS 将接受用户输入的任何值并将其赋予变量。这意味着用户可以将任何内容,例如 234,@.#$% 等,放入 feeling 变量中。
JavaScript 的主要特点
从以上例子中,我们可以总结出 JavaScript 的以下几个主要特点:
- 弱类型脚本语言
- 可用于客户端和服务器端脚本(通过 Node.js)
- 灵活且动态
- 所有主流浏览器均支持
- 轻量级且为解释型语言
如果您有兴趣深入学习 JavaScript,可以参考这个 Udemy 课程.
什么是 TypeScript?
真实世界的应用程序通常包含大量的验证和动态检查。对于此类应用程序,JavaScript 代码在某些情况下会变得难以测试和维护,这主要是由于缺乏类型检查机制。在从用户获取数据的同时,确保数据的正确性至关重要。这正是 TypeScript 发挥作用的地方。
TypeScript 是一种强类型语言。如果您没有明确定义变量的类型,TypeScript 编译器将报错。
JavaScript 和 TypeScript 都遵循 ECMAScript 规范。TypeScript 可以运行所有 JavaScript 代码并支持所有的 JS 库,因此它被认为是 JavaScript 的超集。
TypeScript 的安装
要在 TypeScript 中执行我们之前的代码示例,我们需要使用 npm 包安装 TypeScript 编译器 (如果您的环境中已安装 Node.js):
npm install -g typescript
您还可以从官方 微软下载页面 直接下载安装。 此外,您可以使用 TS Playground 来查看代码从 ts 文件编译成 js 文件的过程。
完成安装后,您可以在 tsconfig.json 文件中配置项目设置,然后使用任何 IDE 或文本编辑器编写 TypeScript 代码,并将文件保存为 .ts 扩展名。
尽管如此,您仍然可以通过不显式定义变量类型来规避 TypeScript 的类型检查,因为 TypeScript 可以推断出数据类型。但是,如果您在编译过程中赋予了变量与其初始类型不符的值(例如,在我们的例子中,第一次使用时被推断为字符串类型),则会收到 “feeling” 错误提示。
通过类型注释来提高代码的可维护性和易读性总是一个不错的选择:
var feeling: string = “happy”;
TypeScript 提供了许多其他功能,可以使开发人员的工作更加轻松。
TypeScript 的主要特点
TypeScript 拥有丰富的功能集,每个新版本都会引入新的特性,使其开发过程更加便捷。例如,在最新的 4.0 版本中,一些新增功能 包括可变元组类型,自定义 JSX 工厂,以及从构造函数推断类属性等等。 TypeScript 的一些典型特点包括:
- 支持面向对象的编程概念,如接口,继承,类和泛型
- 能够在编译阶段及早发现错误
- 对 IDE 提供语法检查和智能提示
- 在类型检查的帮助下,调试代码更加容易
- 能够编译为 JavaScript 代码
- 可用于服务器端和客户端应用程序开发
- 支持跨平台和跨浏览器运行
- 支持所有 JavaScript 库和扩展
为什么我们需要 TypeScript?(TypeScript 相对于 JavaScript 的优势)
在 2012 年正式公开之前,微软已经将 TypeScript 开发并使用于其内部项目长达两年。他们创建了这种类型化的 JavaScript,以方便测试生产级企业应用程序代码。您仍然可以使用动态类型,但也可以在必要时为变量添加类型约束。
考虑以下代码:
var mynum = //从用户获取; addten(number){ return number + 10; }
我们希望结果始终是一个数值。但是,如果用户输入了 “羊” 呢?输出将会是 “sheep10″。理想情况下,我们应该告诉用户这个操作是不可行的!
此外,当您有可用的类型信息时,文本编辑器和 IDE 会更加智能且易于使用,并有助于避免运行时错误。在后期重构代码也会变得更加容易。
这是否意味着我们不再需要 JavaScript?(TypeScript 相对于 JavaScript 的缺点)
您可以将 TypeScript 看作是 JavaScript 的扩展,而不是 JavaScript 的替代品。
对于较小的代码块,TypeScript 可能会造成额外的开销,因为需要进行安装,编译和反编译等步骤。而使用 JavaScript,您只需在 HTML 文件中直接编写脚本即可。调试代码也更加方便,因为每次修改代码后,您只需简单地刷新浏览器即可。
正面对比
现在我们已经了解了 TypeScript 和 JavaScript 的特性和优势,让我们来做一个更详细的对比:
TypeScript | JavaScript |
一种能够在编译时及早发现错误的类型化语言 | 错误在运行时才会被发现 |
适用于大型项目,因为它提高了代码的可维护性和可读性 | 随着代码量的增加,测试和调试变得困难,因此 JS 更适合小型项目 |
是 JS 的超集,具备面向对象和类型检查等功能 | 一种支持动态 Web 内容创建的脚本语言 |
需要安装编译器并配置设置 | 无需任何安装,可以直接在浏览器中使用 <script> 标签编写 JS 代码 |
所有的 .ts 文件在执行前都会被编译成 .js 文件,这个过程称为反编译 | 开发人员可以将 .js 文件直接通过 <src> 标签引入到 HTML 文件中执行 |
功能强大且直观,具有丰富的功能,如模块,泛型和接口 | 适用于不需要高级功能的简单 Web 应用程序 |
可用于服务端和客户端脚本 | 易于用于客户端脚本,但对于服务器端脚本来说变得繁重且复杂 |
由于编译步骤,执行速度较慢 | 无需编译,因此执行速度更快 |
支持静态和动态类型 | 仅支持动态类型 |
可以指定类型注释,如:var feeling: string = "happy"; |
无法指定类型注释,因为不能定义变量类型。 |
结论
从学习角度来看,JavaScript 可能是你的入门首选。你只需要打开一个文件,在 <script></script>
标签中输入一些代码,将它保存为 HTML 文件,就能看到运行结果!然后,你可以在此基础上创建更多动态内容。
此外,掌握 JavaScript 知识对于开发大型应用程序,并轻松过渡到 TypeScript 都非常有用。
然而,从职业和薪资的角度来看,作为一名 TypeScript 开发人员,你将能够更灵活,更熟练地处理 JS 和 TS 项目,因此在就业市场中更有竞争力。一般来说,TypeScript 开发人员的年薪在 11 万美元至 14.7 万美元之间,而 JS 开发人员的年薪约为 6.3 万美元至 11.8 万美元。