TypeScript 在 Node.js 项目中的渐进式落地
· 阅读需 2 分钟
2021 年的 Node.js 项目里,如果还完全不谈 TypeScript,多少会开始显得有点吃力。项目一大、接口一多、团队一扩,人肉靠约定来维持字段一致性,很快就会出问题。
但我也不赞成那种“把老项目一把梭全改成 TypeScript”的思路。更稳的做法,通常是渐进式落地。
为什么 Node.js 项目越来越需要类型
后端项目最常见的混乱,并不是语法,而是数据结构:
- 接口参数长什么样
- service 返回值长什么样
- 配置项到底有哪些
- 某个字段到底能不能为
null
TypeScript 在这里最有价值的地方,就是让这些约定提前暴露出来。
最适合先接入的三个位置
如果是已有项目,我会优先从下面三块开始:
- 接口 DTO
- 配置对象
- 核心 service 返回值
因为这三类地方一旦类型清楚,项目里很多“猜字段”的成本会立刻下降。
type CreatePostPayload = {
title: string;
summary: string;
content: string;
tags?: string[];
};
type PostListItem = {
id: number;
title: string;
slug: string;
publishedAt: string | null;
};
渐进式接入比全面改造更现实
比较适合团队的推进方式通常是:
- 允许 JS 与 TS 共存
- 新模块优先用 TS
- 边改业务边补类型
这样既不会把重构成本一下推到最高,也能逐步把收益吃到。
不要把类型写成另一套负担
TypeScript 的坑也很明显:一旦过度设计,类型本身会比业务还难懂。我的经验是,Node.js 项目里的类型要服务于边界清晰,而不是追求“类型体操”。
所以最重要的是:
- 先把输入输出写清楚
- 再补关键业务对象
- 最后再考虑更复杂的泛型抽象
小结
TypeScript 在 2021 年已经不只是“更严谨一点”的选择了,它开始成为团队协作成本控制的一部分。对 Node.js 项目来说,渐进式接入是最务实、也最容易被团队接受的路线。
