JavaScript 中 TypeScript 怎么在 Node.js 后端开发中结合 Express 编写类型安全的接口

小杰大大_5359

小杰大大_5359

2026-08-26

169人浏览

原创

typescript 与 express 结合的核心是让请求、响应、中间件、路由处理器和数据模型全程具备可推断、可校验的类型。需正确安装依赖(如 @types/express)、配置 tsconfig.json、定义接口与 dto、显式标注路由处理器泛型参数、扩展 express.request 类型以支持挂载字段,并统一使用 errorrequesthandler 处理错误,确保类型贯穿全链路。

javascript 中 typescript 怎么在 node.js 后端开发中结合 express 编写类型安全的接口

TypeScript 和 Express 在 Node.js 后端中结合,核心是让请求、响应、中间件、路由处理器和数据模型全部具备可推断、可校验的类型,而不是靠运行时手动检查。关键不在于“能不能用”,而在于“怎么让类型真正贯穿每一层”。

初始化项目与基础类型支持

先装对依赖,再配对配置,这是类型安全的前提:

  • 运行 npm init -y 创建项目,然后安装运行时依赖:npm install express
  • 安装开发依赖:npm install -D typescript ts-node @types/node @types/express nodemon —— 其中 @types/express 提供了 Request、Response、NextFunction 等核心类型的定义
  • 执行 npx tsc --init 生成 tsconfig.json,重点开启:
    "target": "ES2020"、"module": "CommonJS"、"strict": true、"esModuleInterop": true、"rootDir": "./src"、"outDir": "./dist"

定义接口类型与 DTO

把 API 的输入输出结构显式声明出来,避免 any 或隐式 any:

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载
  • 在 types/user.ts 中定义业务实体:
    interface User { id: number; name: string; email: string; createdAt: Date; }
  • 用工具类型约束请求体:
    type CreateUserBody = Omit<user>;</user>
    type UpdateUserBody = Partial<pick>>;</pick>
  • 用 class-validator 配合装饰器做运行时验证(需搭配中间件):
    class CreateUserDTO { @IsString() name: string; @IsEmail() email: string; }

编写类型安全的路由处理器

Express 的 req 和 res 默认是泛型类,必须显式传入类型参数才能启用完整类型检查:

  • 路由参数、查询字符串、请求体、响应体各自独立标注:
    app.post('/users', (req: Request, res: Response) => { ... })
  • 这样写后,req.body.name 就有自动补全和类型保护,res.json({ data: xxx }) 也会校验 xxx 是否满足 User 结构
  • 控制器函数可抽离并导出,类型随函数签名一起被推导:
    export const createUser = (req: Request, res: Response) => { ... };

类型化中间件与错误处理

中间件也应明确其对 req 的修改,并兼容后续处理器的类型预期:

  • 例如日志中间件不改变类型,直接使用原 Request 和 Response
  • 若中间件往 req 上挂载字段(如用户信息),应扩展 Request 类型:
    declare global { namespace Express { interface Request { user?: User; } } }
  • 统一错误处理中间件接收 ErrorRequestHandler 类型,确保 err 参数被识别为 Error 实例

整个链路从 package.json 脚本(如 "dev": "nodemon --exec ts-node src/app.ts")到控制器返回值,类型都可追踪、可约束、可重构。不是加了 TypeScript 就自动类型安全,而是每一步主动声明或适配类型,才能真正把错误挡在编译阶段。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2143

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5750

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5046

10

js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4286

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1089

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

4204

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

860

4

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1756

5

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

2023.09.04

3105

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习