想了解在 Node.js 环境中完整使用 TypeScript 的流程,包括项目初始化、配置、编译和运行,这是前端 / 后端开发中非常常见的需求,TypeScript 能为 Node.js 项目带来类型安全的优势。
一、核心思路
在 Node.js 中使用 TypeScript 的核心流程是:
- 初始化项目
- 安装 TypeScript 及相关依赖
- 配置
tsconfig.json(TypeScript 编译选项) - 编写 TypeScript 代码
- 将 TS 代码编译为 JS 代码(或使用工具直接运行 TS)
- 运行编译后的 JS 代码
二、完整实操步骤
1. 初始化项目(前提:已安装 Node.js)
# 创建项目目录并进入 mkdir ts-node-demo && cd ts-node-demo # 初始化 package.json(一路回车或 -y 快速生成) npm init -y # 安装 TypeScript(开发依赖) npm install typescript --save-dev # 安装 Node.js 类型声明(让 TS 识别 Node.js API) npm install @types/node --save-dev
2. 生成并配置 tsconfig.json
tsconfig.json 是 TypeScript 的核心配置文件,决定了编译规则:
# 生成默认的 tsconfig.json(需先安装 typescript) npx tsc --init
然后修改 tsconfig.json,保留核心配置(其他可注释 / 删除):
{
"compilerOptions": {
/* 基础配置 */
"target": "ES2020", // 编译后的 JS 版本(匹配 Node.js 支持版本)
"module": "CommonJS", // 模块系统(Node.js 默认 CommonJS)
"rootDir": "./src", // TS 源码目录
"outDir": "./dist", // 编译后的 JS 输出目录
"removeComments": true, // 移除注释
"strict": true, // 开启严格类型检查(推荐)
"esModuleInterop": true, // 兼容 CommonJS/ES 模块
"skipLibCheck": true, // 跳过库文件的类型检查
"forceConsistentCasingInFileNames": true, // 强制文件名大小写一致
/* Node.js 相关 */
"moduleResolution": "Node", // 按 Node 规则解析模块
"resolveJsonModule": true, // 允许导入 JSON 文件
"types": ["node"] // 引入 Node.js 类型声明
},
"include": ["src/**/*"], // 要编译的 TS 文件范围
"exclude": ["node_modules", "dist"] // 排除的目录
}
3. 编写 TypeScript 代码
在项目根目录创建 src 文件夹,新建 index.ts:
// src/index.ts
import fs from 'fs'; // 导入 Node.js 内置模块(有类型提示)
import path from 'path';
// 定义接口(TS 特性)
interface User {
id: number;
name: string;
age: number;
}
// 定义函数(带类型注解)
function getUserInfo(user: User): string {
return `ID: ${user.id}, 姓名: ${user.name}, 年龄: ${user.age}`;
}
// 示例数据
const user: User = { id: 1, name: "张三", age: 25 };
// 使用 Node.js API
const projectRoot = path.resolve(__dirname, '..');
console.log("项目根目录:", projectRoot);
// 写入文件示例
fs.writeFileSync(
path.join(projectRoot, 'user.txt'),
getUserInfo(user),
'utf8'
);
console.log(getUserInfo(user));
4. 编译并运行 TS 代码
方式 1:手动编译 + 运行(基础方式)
# 编译 TS 代码(根据 tsconfig.json 配置) npx tsc # 运行编译后的 JS 代码 node dist/index.js
运行后会看到:
- 控制台输出用户信息和项目根目录
- 项目根目录生成
user.txt文件,内容为用户信息
方式 2:使用 ts-node 直接运行(开发效率更高)
ts-node 可以跳过手动编译步骤,直接运行 TS 代码,适合开发阶段:
# 安装 ts-node(开发依赖) npm install ts-node --save-dev # 直接运行 TS 文件 npx ts-node src/index.ts
方式 3:添加 npm 脚本(简化命令)
修改 package.json 的 scripts 字段:
{
"scripts": {
"build": "tsc", // 编译 TS
"start": "node dist/index.js", // 运行编译后的代码
"dev": "ts-node src/index.ts" // 开发模式(直接运行 TS)
}
}
之后可通过以下命令操作:
# 编译 npm run build # 运行 npm run start # 开发模式 npm run dev
三、进阶:热重载(开发阶段)
开发时每次修改代码都要重新运行,可使用 nodemon + ts-node 实现热重载:
# 安装 nodemon(开发依赖) npm install nodemon --save-dev
在 package.json 添加脚本:
{
"scripts": {
"dev:watch": "nodemon --exec ts-node src/index.ts"
}
}
运行热重载命令:
npm run dev:watch
修改 src/index.ts 后,代码会自动重新运行。
总结
- Node.js 中使用 TypeScript 需先安装
typescript和@types/node,并配置tsconfig.json核心参数(rootDir/outDir/target/module)。 - 核心流程:编写 TS 代码 → 用
tsc编译为 JS → 用node运行 JS;开发阶段可使用ts-node直接运行 TS 提升效率。 - 开发阶段推荐搭配
nodemon实现热重载,简化重复操作。
关键注意点
@types/node是必须的,否则 TS 无法识别fs/path等 Node.js 内置模块。strict: true开启严格模式能最大程度发挥 TS 的类型优势,建议保持开启。- 生产环境需运行编译后的
dist目录下的 JS 代码,而非直接运行 TS。