TypeScript与JavaScript哪一个更好?

458 阅读10分钟

TypeScript vs JavaScript: which one is better?

尽管它们有很多相似之处,但**JavaScript(JS)是否真的比TypeScript(TS)**好--或者反过来说--在于它们的差异。

本文试图解释这两种语言之间目前的主要对比,并提供各自的代码示例。此外,我们将解释JS和TS是否是面向对象的编程(OOP)语言,以及开发人员应该学习哪一种。

最后,我们将披露哪种语言更好!正如我们所知,JavaScript是一种对网络的成功有很大贡献的语言。是时候让TypeScript取而代之了吗?让我们拭目以待。

目录

什么是JavaScript?
什么是TypeScript
TypeScript和JavaScript的区别
定义
编译
类型化
JavaScript是一种面向对象的编程(OOP)语言吗?
TypeScript与JavaScript:代码示例
TypeScript比JavaScript好吗? TypeScript 与JavaScript:学习哪一种?
结论

什么是 JavaScript?

JavaScript(JS)是世界上最流行的编程语言。它被认为是一种高级语言,有助于创建互动和动态网页。与HTML和CSS一起,JavaScript也是网络应用的核心技术之一,其动态类型和**即时编译器(JIT)**的特点非常突出。

另外,由于它能够支持函数式编程、命令式编程风格和事件驱动编程,因此它是一种多范式语言。JavaScript遵循客户端的实现方式(当脚本在用户的浏览器上运行时)。然而,它也有允许服务器端实现的引擎(脚本在网络服务器上运行,并根据每个用户的请求定制响应)。

JavaScript开始作为服务器端技术脱颖而出,主要是由于Node.js的发展和普及。尽管如此,用JavaScript处理大型复杂的应用程序并不容易,因为随着代码的增长,它变得更难维护和重用。因此,尽管有好处,服务器(后端)上的JavaScript也使事情变得更加混乱,处理起来更加复杂。为了克服这种纠结,微软推出了TypeScript。

从JavaScript中得到的主要启示

  • 最受欢迎的编程语言。
  • 全面的、跨平台的、多范式的、动态的语言。
  • 客户端和服务器端的实现。
  • JIT编译。
  • 与所有浏览器兼容。
  • 为小型脚本而开发。

什么是Typescript?

如前所述,JavaScript可以管理数以百计的代码行,但它不是为了处理非常广泛和复杂的应用程序而开发的。因此,TypeScript(TS)是JavaScript的一个超集,实现了与JavaScript相同的目的。然而,它是为了处理和开发更大的应用程序而创建的,因为它是强类型的,并且包括编译时错误控制

更确切地说,TypeScript是一种支持静态和动态类型的编程语言,并进一步提供了继承功能、类、可视范围、命名空间、接口、联盟和其他现代功能。此外,它还可以实现注释、变量、函数、语句、模块和表达式。

TS可以用于客户端和服务器端的应用。此外,JavaScript库也与TypeScript兼容。

TypeScript的主要启示

  • JavaScript的超集,因此与JS库兼容。
  • 强类型的、已编译的语言,可以遵循OOP原则。
  • 更容易调试。
  • 提供静态类型化。
  • 提供全面的IDE支持。
  • 可以将其代码转换为JavaScript代码。

TypeScript与JavaScript的区别

定义

第一个值得一提的区别是,JavaScript 是一种脚本语言,有助于创建互动和动态网页,而 TypeScript 是 JavaScript 的强类型超集。

总而言之,TypeScript 是带有额外功能的 JavaScript,其开发目的是克服 JavaScript 的缺陷,尤其是在静态类型和处理代码复杂性方面。

编译

一方面,使用JavaScript时不需要编译。因为它是一种解释型语言,错误只能在运行时被发现。换句话说,它首先需要运行才能被测试并被认为有效或无效。因此,可能需要花很多时间来发现代码中的bug和错误。

另一方面,TypeScript有一个编译时错误功能,正如其名称所示,它编译代码并检查可能在语法中发现的编译错误。这个功能可以在运行脚本之前为开发者节省宝贵的时间。此外,它还可以避免一些错误进入生产,所以它也有助于企业,而不仅仅是开发人员。

类型化

Javascript有动态类型(即,一个变量现在可以是一个整数,以后可以是一个字符串)。这使得我们很难知道如何处理一个特定变量中的内容。此外,它不提供静态类型。静态类型意味着开发者声明一个变量可以拥有的数据类型。例如,如果'x'被声明为只指向整数,那么一旦你要在里面放一个字符串,编译器就会给出一个错误。与JS相反,TypeScript是强类型化的,并且可以实现静态和动态类型化(它是可选的)。

静态类型可能是使用TypeScript的主要优势。它允许开发人员在编译时检查类型的准确性。例如,JavaScript提供了像stringnumber 这样的语言基元,但它并不检查开发者是否已经一致地分配了这些基元。TypeScript则是如此。

此外,在现代开发环境(如VS Code)中使用TS静态类型,可以提供关于开发者代码的额外信息和正确建议,有助于改善文档(其他开发者也喜欢)。代码导航和重构也是可用的功能,可以帮助开发者跟踪特定的函数和声明的位置,等等。另外,如前所述,总的来说,TS使人们更容易发现错误和bug。

JavaScript是一种面向对象的编程(OOP)语言吗?

ECMAScript是一个脚本语言的标准;它提供了规则、指南和其他细节,描述了脚本语言应该包含的内容。JavaScript是一种符合ECMAScript规范的脚本语言。这些规范可以改变,也可以引入新的规范;因此,ECMAScript有几个版本。引入最重大修改的版本之一是ECMAScript 6(也被称为ES6或ECMAScript 2015)。这个版本引入了模块、类、箭头函数、增强的对象属性,以及其他令人兴奋的功能。

在JavaScript的ES6发布后,确实引入了类的概念。然而,这是JavaScript的原型继承的一个语法特征。JS是基于原型的,而不是基于类的。因此,JavaScript不被认为是一种纯粹的面向对象的编程语言,尽管它能够遵循一些面向对象的编程原则。

TypeScript是一种面向对象的编程(OOP)语言吗?

这个问题的答案并不那么直接。一方面,TypeScript 具有类和其他功能,允许开发人员遵循 OOP 原则和技术。

另一方面,它不是一种有主见的语言,也就是说,它不会像某些语言(如Java和C#)那样 "强迫 "开发者遵循面向对象的原则。因此,TS通常不被认为是一种面向对象的编程语言。

事实上,在TypeScript中,开发者也可以选择指令性或功能性代码,而不是面向对象的代码。因此,如前所述,JavaScript和TypeScript是多范式语言

TypeScript与JavaScript:代码示例

JavaScript代码示例

const mars = {
    name: "Mars",
    gravity: 3.721
};
mars.mass;      // returns undefined
function weight(mass, gravity) {
    return mass * gravity;
}

TypeScript代码:显式类型

// Explicit Types
let destination = "Mars";  // it's the same as let destination: string but TS infers by itself

TypeScript代码:使用枚举

// We can use enums
enum Professions { Astronaut, RocketScientist, Mechanic }

TypeScript编译为JavaScript:使用枚举

// We can use enums
var Professions;
(function (Professions) {
    Professions[Professions["Astronaut"] = 0] = "Astronaut";
    Professions[Professions["RocketScientist"] = 1] = "RocketScientist";
    Professions[Professions["Mechanic"] = 2] = "Mechanic";
})(Professions || (Professions = {}));

TypeScript 代码:使用类型别名

// We can also use type aliases
type Person = 
    { type: Professions.Astronaut, name: string, isAtSpace: boolean} |
    { type: Professions.RocketScientist, name: string }

TypeScript代码:使用接口

interface Planet {
    name: string;
    gravity: number;       
    asteroids?: string[] | string;       // optional property (?) and narrowing where we can assign more than one type
}
const mars: Planet = {
    name: "Mars",
    gravity: 3.721
};
mars.mass;      // throw an error: Property 'mass' does not exist on type '{ name: string; gravity: number }'.

TypeScript 代码:使用 Parameter 类型注释

// Parameter type annotation
function weight(mass: number, planet: Planet) {
    return mass * planet.gravity;
}
function printAsteroids(planet: Planet) {
    if (Array.isArray(planet.asteroids)) {
        console.log("Asteroids: " + planet.asteroids.join(", "));
    } else {
        console.log("Asteroids: " + planet.asteroids);
    }
}

TypeScript 比 JavaScript 好吗?

从下面的图片中我们可以观察到,JavaScript多年来一直是第一大编程语言,但TypeScript自2017年以来的人气增长也是众所周知的。

TypeScript vs JavaScript: which one is better?

2020年的Octoverse状态|Github

看完这两种语言的主要区别,似乎用不了多久TypeScript就会追上JavaScript,但它真的比JS好吗?

嗯,项目的规模是一个需要考虑的重要变量。对于较小的项目来说,TypeScript并没有真正脱颖而出,可能不值得花费精力。在这种情况下,JavaScript可能更有优势,因为它可以到处运行(跨平台),而且非常轻巧。事实上,与JavaScript相比,TypeScrit的缺点之一是它不能在每个浏览器上运行,这意味着必须使用TypeScript编译器Babel插件来将TS代码转化为普通JS,使其对所有浏览器都能理解。

另外,考虑到它不是强类型的,JS也可以实现更快的编码,尽管不是很适合更大和更复杂的应用程序。此外,TypeScript需要一些时间和CPU资源来编译代码,而且与JavaScript不同的是,它不会立即在浏览器中显示变化(需要几秒钟)。

尽管如此,正如我们在本文中所解释的那样,似乎很清楚TypeScript是中等和大型项目的首选。事实上,它是为这些项目明确设计的。

首先,在TypeScript中更容易重构代码。 其次,TS更依赖于显式类型,使开发者和团队能够更好地理解不同部分的交互方式。最后但并非最不重要的是,TypeScript通过编译时检查来识别错误和其他错误。这些功能可以提高在大规模系统中工作时的效率和组织。

另外,TypeScript与JavaScript非常相似,可以使用JS拥有的所有库、工具和框架,所以当涉及到更复杂的项目时,绝对值得在TS上试一试。

TypeScript与JavaScript:学习哪一个?

要学习TypeScript,开发人员必须首先学习JavaScript。开发人员对JavaScript了解越多,学习TypeScript就越容易,因为这两种语言共享相同的语法以及相同的运行时行为(除了TS有一个编译时检查器)。

作为最流行的语言,JavaScript有很多可用的资源和一个庞大的社区。在大多数情况下,TypeScript开发者也可以从这些资源中受益,因为任务的执行方式将是相同的。

总结

JavaScript是一种令人难以置信的语言;否则,它就不会成为这么多年来最受欢迎的语言。然而,这并不意味着它是完美的(完美的编程语言甚至存在吗)。当涉及到处理大型项目时,在JavaScript中事情会变得混乱和令人困惑。因此,微软开发了TypeScript。

TypeScript几乎是JavaScript加上扩展的能力。他们的主要区别是,TypeScript是强类型的,而JavaScript不是。此外,与JS不同的是,TS被设计为处理更大的项目,其原因在于这三个主要方面:

  1. 它更容易重构代码。
  2. 通过编译时的检查来识别bug和错误。
  3. 明确的类型。

一个比另一个好吗?是的,也不是。对于较小的项目,使用TypeScript的努力通常不会得到回报;因此,JavaScript可能更好。对于大型项目,是的,TypeScript更好,更有效率。