如何在 Nest.js 项目中使用 TypeScript

阅读时长 4 分钟读完

简介

Nest.js 是一个基于 Node.js 和 TypeScript 的开源 Web 框架,它使用了现代的 JavaScript 工具,通过减少样板代码的数量来提供完整的开发体验。本文将介绍如何在 Nest.js 项目中使用 TypeScript。

安装 TypeScript

在开始使用 TypeScript 前,需要先安装它。可以使用如下命令进行安装:

初始化 Nest.js 项目

在安装完 TypeScript 后,需要初始化一个 Nest.js 项目。可以使用如下命令进行初始化:

这个命令会在当前目录下创建一个名为 nest-app 的新项目。

配置 TypeScript

在初始化 Nest.js 项目后,需要将 TypeScript 配置添加到项目中。可以在项目根目录下创建一个文件 tsconfig.json

-- -------------------- ---- -------
-
  ------------------ -
    --------- -----------
    ------------------ -----
    ------------------------- -----
    ------------------------ -----
    --------- ------
    ------------------- -------
    ------------ -----
    --------- ---------
    ---------- ---
  --
  ---------- ------------
-

在这个文件中,需要对几个关键的 compilerOptions 进行配置:

  • module:指定需要使用的模块类型。
  • esModuleInterop:确保在导入 CommonJS 模块时,不会出现 import foo = require('foo') 这样的语法。
  • experimentalDecoratorsemitDecoratorMetadata:用来支持 Nest.js 中的装饰器。
  • target:指定目标 ES 版本。
  • moduleResolution:指定模块解析规则。
  • sourceMap:生成调试信息。
  • outDir:编译后的文件输出目录。
  • baseUrl:指定 src 目录为根目录。

使用 TypeScript 编写控制器

在 Nest.js 中,控制器是负责处理 HTTP 请求的模块。下面是 Nest.js 控制器的一个示例:

-- -------------------- ---- -------
------ - ----------- --- - ---- -----------------

------------------
------ ----- ------------- -
  ------
  ----------- ------ -
    ------ ------ --------
  -
-

在这个示例中,我们使用 @Controller 装饰器将控制器标记为一个 Nest.js 控制器,并在路由中指定了路径为 /api。使用 @Get 装饰器将 getHello() 方法标记为处理 HTTP GET 请求。在 TypeScript 中使用装饰器需要在 tsconfig.json 文件中启用 experimentalDecoratorsemitDecoratorMetadata

使用 TypeScript 编写服务

在 Nest.js 中,服务用于在控制器和其他服务之间共享某些功能。下面是 Nest.js 服务的一个示例:

在这个示例中,我们使用 @Injectable 装饰器将服务标记为一个 Nest.js 服务。这个服务包含了一个 getHello() 方法,它将返回一个字符串。

启动 Nest.js 服务器

在编写了控制器和服务之后,需要启动 Nest.js 服务器。可以使用如下命令启动:

在启动后,可以在浏览器中访问 http://localhost:3000/api,应该会返回一个“Hello World!”字符串。

总结

本文介绍了如何在 Nest.js 项目中使用 TypeScript。需要做的就是安装 TypeScript、初始化 Nest.js 项目、配置 TypeScript、编写控制器和服务,最后启动 Nest.js 服务器。希望本文对你学习 Nest.js 和 TypeScript 有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e89813f6b2d6eab34225aa

纠错
反馈