不灭的焱

革命尚未成功,同志仍须努力 下载Go 下载Java

作者:AlbertWen  添加时间:2026-01-27 16:07:14  修改时间:2026-01-28 05:58:38  分类:06.前端/Vue/Node.js  编辑

想了解在 Node.js 环境中完整使用 TypeScript 的流程,包括项目初始化、配置、编译和运行,这是前端 / 后端开发中非常常见的需求,TypeScript 能为 Node.js 项目带来类型安全的优势。

一、核心思路

在 Node.js 中使用 TypeScript 的核心流程是:

  1. 初始化项目
  2. 安装 TypeScript 及相关依赖
  3. 配置 tsconfig.json(TypeScript 编译选项)
  4. 编写 TypeScript 代码
  5. 将 TS 代码编译为 JS 代码(或使用工具直接运行 TS)
  6. 运行编译后的 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.jsonscripts 字段:

{
  "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 后,代码会自动重新运行。

总结

  1. Node.js 中使用 TypeScript 需先安装 typescript@types/node,并配置 tsconfig.json 核心参数(rootDir/outDir/target/module)。
  2. 核心流程:编写 TS 代码 → 用 tsc 编译为 JS → 用 node 运行 JS;开发阶段可使用 ts-node 直接运行 TS 提升效率。
  3. 开发阶段推荐搭配 nodemon 实现热重载,简化重复操作。

关键注意点

  • @types/node 是必须的,否则 TS 无法识别 fs/path 等 Node.js 内置模块。
  • strict: true 开启严格模式能最大程度发挥 TS 的类型优势,建议保持开启。
  • 生产环境需运行编译后的 dist 目录下的 JS 代码,而非直接运行 TS。