发布于 2026-01-06 1 阅读
0

我为什么转用 TypeScript 并且毫不后悔

我为什么转用 TypeScript 并且毫不后悔

值得一提的是,我最初并没有打算放弃原生 JavaScript 而选择 TypeScript。只是碰巧我们决定将生产环境项目迁移到 Angular 4,而众所周知,Angular 4 默认使用 TypeScript 作为编程语言。尽管 Angular 项目也可以用纯 JavaScript 编写,但它的文档、示例以及 Stack Overflow 上的大多数答案都是用 TypeScript 编写的。因此,我们做出了这个决定,而且我对此毫不后悔。让我来解释一下原因。TypeScript
为我们提供了许多 ECMAScript(即 JavaScript)尚未实现的优势。接下来,我们将逐一探讨这些优势。

类型

对于那些没有接触过或听说过 TypeScript 的人来说:

……它是 JavaScript 的一个类型化超集,可以编译成纯 JavaScript。

从语言名称就能看出,TypeScript 的主要区别在于它使用类型。没错,它是一种强类型语言,而大约 50% 的 JavaScript 开发者正是因为缺少类型而感到遗憾,而剩下的 50% 则对其他强类型语言嗤之以鼻。如果不指定响应或其他数据的类型,我们的代码会拥有很大的自由度,但与此同时,这种自由度也是导致大量难以调试的错误的主要原因(我甚至不确定是否存在“难以调试”这样的词)。
在我看来,类型非常棒。它们让你的代码更准确,也更容易被其他开发者理解。当你明确定义方法的返回类型时,就能更轻松地看到方法的返回值,同时也能防止你返回其他类型的值。类型的第二个好处是能够让你看到 HTTP 请求的响应类型。我们都知道,在 JavaScript 中调试错误有多么痛苦,尤其是在代码运行不正常的情况下,原因往往是你引用了一个可能根本不存在的响应属性。因此,声明响应类型可以避免开发者为此头疼。

类和接口

对于那些要告诉我 ES6 引入了类的人,我的回答是“是的,我知道”。然而,TypeScript 不仅仅关乎类和类型。除了 TS 类为我们开发者提供了公共成员、私有成员、静态成员和只读成员之外,它还引入了抽象类和接口,而这些在 JavaScript 中目前并不存在。
抽象类属于面向对象编程(OOP)的更高级主题,而非 TypeScript 本身的内容,但它们仍然值得一提。以下是 TypeScript 官方文档中的一段摘录:

抽象类是其他类可以派生的基类,它们不能被直接实例化。与接口不同,抽象类可以包含其成员的实现细节。`abstract` 关键字用于定义抽象类以及抽象类中的抽象方法。

抽象类的最简单、最生动的例子是:

abstract class Animal { 
   abstract makeSound(): void; 
   move(): void { 
      console.log(“roaming the earth…”); 
   } 
}
Enter fullscreen mode Exit fullscreen mode

接口是 TypeScript 中引入的另一项强大特性,与抽象类相比,接口的使用频率更高。在 TypeScript 中,接口通常用于命名自定义数据类型,它被认为是一种强大的方式,既可以定义代码内部的契约,也可以定义与项目外部代码的契约。这意味着接口可以帮助你定义类或数据类型的框架,而它们的实际实现可以有所不同。

公共、私有、受保护、静态、只读修饰符

正如之前提到的,ES6 为 JavaScript 开发者引入了类,但它缺少一个重要的功能——修饰符。TypeScript 作为 JavaScript 的更高级、更先进的版本,成功地弥补了这一缺陷。借助 public、private、protected、static 和 readonly 等修饰符,我们可以将变量、属性和方法置于相应的作用域内。此外,我们不再需要使用诸如立即执行函数表达式 (IIFE) 或显式声明模式之类的变通方法。使用 TypeScript,您可以轻松定义哪些字段和方法可以在类外部访问,哪些不能,哪些可以修改,哪些必须始终保持不变。

命名空间和模块

与 ES6 的模块机制相比,TypeScript 还提供了命名空间这一强大的功能,而命名空间在其他面向对象编程语言(例如 C#)中也得到了广泛应用。
简而言之,命名空间是一种组织代码的方式,它将代码划分为不同的部分,从而使我们能够从应用程序的其他部分访问这些代码。
当您不想用大量变量破坏全局作用域时,使用命名空间尤其有用。此外,当应用程序规模较大,我们需要将代码拆分到多个文件中以方便日后维护时,接口也非常实用。

TypeScript 仍然是 JavaScript

最后但同样重要的是,我想强调的是,TypeScript 本质上仍然是 JavaScript。TS 基于 ES6 的特性,既不提供新方法,也不修改现有方法。如果你将 TS 代码编译成 JavaScript,你会看到同样的原型继承。在编译后的 JS 代码中,你永远不会看到接口、装饰器或修饰符——它们根本不存在。因此,它只是 JavaScript 之上的一个层,可以提升开发者的体验,并避免许多不必要的 bug。
此外,你可以自由选择 TypeScript 代码的编译目标 JavaScript 版本,这意味着它甚至可以在 Internet Explorer 中运行。
请不要误解我的意思,我并不是说我们都应该停止使用 JavaScript 而转而使用 TypeScript。JavaScript 是一门优秀的语言,并且发展速度非常快。它的受欢迎程度逐年增长,现在已成为最流行、使用最广泛的编程语言之一。尽管如此,它仍然有很多可以改进的地方,而这正是 TypeScript 的用武之地。

文章来源:https://dev.to/vbrdnk/why-i-moved-to-typescript-and-have-no-regrets-3174