Node.js 与 TypeScript

什么是 TypeScript

TypeScript 是一种流行的开源语言,由微软维护和开发。它受到全球众多软件开发人员的喜爱和使用。

从本质上讲,它是 JavaScript 的超集,为该语言添加了新的功能。最显著的添加是静态类型定义,这是纯 JavaScript 中没有的。借助类型,例如,我们可以声明在函数中期望的论据类型和返回值类型,或者我们创建的对象的精确形状。TypeScript 是一款非常强大的工具,它为 JavaScript 项目打开了新的可能性。它通过在代码发布之前防止许多错误,使我们的代码更加安全和健壮 - 它在代码开发过程中捕获问题,并与 Visual Studio Code 等代码编辑器完美集成。

我们稍后可以讨论其他 TypeScript 的优势,现在让我们看一些示例!

示例

看一下这段代码片段,然后我们一起分析它。

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 23,
};

const isJustineAnAdult: boolean = isAdult(justine);

第一部分(使用 type 关键字)负责声明我们自定义的对象类型,表示用户。之后,我们利用这个新创建的类型来创建函数 isAdult,它接受一个类型为 User 的参数并返回 boolean。在此之后,我们创建 justine,我们的示例数据,可用于调用之前定义的函数。最后,我们使用有关 justine 是否成年的信息创建一个新变量。

关于这个示例,您还应该了解一些其他事项。首先,如果我们不遵守声明的类型,TypeScript 会提醒我们有错误并防止误用。其次,并非所有内容都必须显式类型化 - TypeScript 非常智能,可以为我们推断类型。例如,变量 isJustineAnAdult 将是 boolean 类型,即使我们没有显式类型化它,或者 justine 将是我们的函数的有效参数,即使我们没有将该变量声明为 User 类型。

好的,我们有一些 TypeScript 代码。现在我们如何运行它呢?

首先,我们需要在项目中安装 TypeScript。

npm i -D typescript

现在我们可以使用终端中的tsc命令将其编译成 JavaScript。让我们开始吧!

假设我们的文件名为example.ts,命令将如下所示

npx tsc example.ts

npx 代表 Node Package Execute。此工具允许我们运行 TypeScript 的编译器,而无需全局安装它。

tsc 是 TypeScript 编译器,它将接收我们的 TypeScript 代码并将其编译成 JavaScript。此命令将生成一个名为example.js 的新文件,我们可以使用 Node.js 运行它。现在我们知道了如何编译和运行 TypeScript 代码,让我们看看 TypeScript 的错误预防功能在实际中的应用!

我们将这样修改我们的代码

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 'Secret!',
};

const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");

而 TypeScript 对此的反应是

example.ts:12:3 - error TS2322: Type 'string' is not assignable to type 'number'.

12   age: "Secret!",
     ~~~

  example.ts:3:3
    3   age: number;
        ~~~
    The expected type comes from property 'age' which is declared here on type 'User'

example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
         ~~~~~~~~~~~~~~~~

example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
                                                     ~~~~~~~~~~~~~~~~~~~~~~


Found 3 errors.

如您所见,TypeScript 成功地阻止了我们发布可能意外工作的代码。太棒了!

更多关于 TypeScript

TypeScript 提供了许多其他很棒的机制,例如接口、类、实用程序类型等等。此外,在大型项目中,您可以在单独的文件中声明您的 TypeScript 编译器配置,并精细地调整其工作方式、严格程度以及编译文件存储位置等。您可以在官方 TypeScript 文档中了解更多关于这些很棒的内容。

TypeScript 的其他值得一提的优势包括:它可以逐步采用,它有助于使代码更易读和理解,它允许开发人员使用现代语言功能,同时为旧版本的 Node.js 发布代码。

Node.js 世界中的 TypeScript

TypeScript 在 Node.js 世界中已经非常成熟,被许多公司、开源项目、工具和框架使用。以下是一些使用 TypeScript 的著名开源项目的例子:

  • NestJS - 一个健壮且功能齐全的框架,使创建可扩展且架构良好的系统变得轻松愉快
  • TypeORM - 受其他语言中知名工具(如 Hibernate、Doctrine 或 Entity Framework)启发的优秀 ORM
  • Prisma - 新一代 ORM,具有声明式数据模型、生成的迁移和完全类型安全的数据库查询
  • RxJS - 用于响应式编程的广泛使用的库
  • AdonisJS - 一个功能齐全的 Node.js Web 框架
  • FoalTs - 优雅的 Nodejs 框架

还有许多其他很棒的项目......也许还有您的下一个项目!