使用 TypeScript 的 Node.js
什么是 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 类型;即使我们没有将此变量声明为 User
类型,justine
仍然是我们的函数的有效参数。
好的,我们有一些 TypeScript 代码。现在我们如何运行它?
首先,在我们的项目中安装 TypeScript:
npm install -D typescript
现在,我们可以使用终端中的 tsc
命令将其编译为 JavaScript。让我们开始吧!
假设我们的文件名为 example.ts
,则命令如下所示:
npx tsc example.ts
TIP
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:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12 age: 'Secret!',
~~~
example.ts:3:5
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 in the same file, starting at: example.ts:12
正如你所看到的,TypeScript 成功地阻止了我们发布可能意外工作的代码。太棒了!
关于 TypeScript 的更多内容
TypeScript 提供了许多其他强大的机制,例如接口、类、实用程序类型等等。此外,在较大的项目中,您可以将 TypeScript 编译器配置声明在一个单独的文件中,并精确地调整其工作方式、严格程度以及例如它存储编译文件的存放位置。您可以在官方 TypeScript 文档中阅读有关所有这些强大功能的更多信息。
TypeScript 的其他一些值得一提的优点是,它可以逐步采用,它有助于使代码更易于阅读和理解,并且它允许开发人员使用现代语言特性,同时为较旧的 Node.js 版本交付代码。
在 Node.js 中运行 TypeScript 代码
Node.js 本身不能运行 TypeScript 代码。您不能直接从命令行调用 node example.ts
。但是这个问题有三个解决方案:
将 TypeScript 编译为 JavaScript
如果您想在 Node.js 中运行 TypeScript 代码,则需要先将其编译为 JavaScript。您可以使用前面所示的 TypeScript 编译器 tsc
来执行此操作。
这是一个小例子:
npx tsc example.ts
node example.js
使用 ts-node
运行 TypeScript 代码
您可以使用 ts-node 直接在 Node.js 中运行 TypeScript 代码,无需先编译。但它不会进行类型检查。因此,我们建议您先使用 tsc
检查代码类型,然后在发布之前使用 ts-node
运行它。
要使用 ts-node
,您需要先安装它:
npm install -D ts-node
然后您可以像这样运行您的 TypeScript 代码:
npx ts-node example.ts
使用 tsx
运行 TypeScript 代码
您可以使用 tsx 直接在 Node.js 中运行 TypeScript 代码,无需先编译。但它不会进行类型检查。因此,我们建议您先使用 tsc
检查代码类型,然后在发布之前使用 tsx
运行它。
要使用 tsx,您需要先安装它:
npm install -D tsx
然后您可以像这样运行您的 TypeScript 代码:
npx tsx example.ts
如果您想通过 node
使用 tsx
,您可以通过 --import
注册 tsx
:
node --import=tsx example.ts
Node.js 世界中的 TypeScript
TypeScript 在 Node.js 世界中已得到广泛应用,并被许多公司、开源项目、工具和框架所使用。一些值得注意的使用 TypeScript 的开源项目包括:
- NestJS - 一个强大且功能齐全的框架,使创建可扩展且架构良好的系统变得轻松愉快
- TypeORM - 受其他语言中知名工具(如 Hibernate、Doctrine 或 Entity Framework)启发的优秀 ORM
- Prisma - 新一代 ORM,具有声明式数据模型、生成的迁移和完全类型安全的数据库查询
- RxJS - 用于反应式编程的广泛使用的库
- AdonisJS - 一个功能齐全的 Node.js Web 框架
- FoalTs - 一个优雅的 Nodejs 框架
以及许多其他优秀的项目……也许还有你的下一个项目!