在 TypeScript 中处理文件系统:实用指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么需要在 TypeScript 中处理文件系统?

\n\n

每个应用程序迟早都会遇到与文件系统交互的需求:保存配置、处理上传的文件、记录日志或管理项目。TypeScript 作为 JavaScript 的超集,通过 Node.js 的 fs(文件系统)模块为开发者提供了强大的文件和目录操作工具。

\n\n

在本文中,我们将通过实际示例详细讲解 TypeScript 中文件系统的基本操作:文件的读取和写入、目录的创建和删除,以及错误处理。所有示例都将使用严格的类型定义,这是 TypeScript 的关键优势。

\n\n

用于文件系统操作的主要模块

\n\n

在开始实践之前,我们先来了解三个需要用到的主要模块:

\n\n
    \n
  • fs — 用于文件系统操作(读取、写入、删除)的核心模块
  • \n
  • fs/promises — 支持 Promise 的 fs 模块版本(推荐用于现代代码)
  • \n
  • path — 用于处理文件和目录路径的实用工具
  • \n
\n\n

在 TypeScript 中导入模块请使用以下语法:

\n\n
import * as fs from 'fs';\nimport * as fsPromises from 'fs/promises';\nimport * as path from 'path';
\n\n

请注意:为了在 TypeScript 中正常工作,请确保您的 tsconfig.json 文件中设置了 "moduleResolution": "node" 和 "esModuleInterop": true 选项。

\n\n

读取文件:同步与异步方法

\n\n

带类型定义的同步读取

\n\n

同步方法会阻塞代码执行,直到操作完成。仅适用于小文件或应用程序的初始加载:

\n\n
import * as fs from 'fs';\nimport * as path from 'path';\n\nfunction readConfigSync(): Record<string, unknown> {\n  const configPath = path.join(__dirname, 'config.json');\n  \n  try {\n    const data = fs.readFileSync(configPath, 'utf-8');\n    return JSON.parse(data) as Record<string, unknown>;\n  } catch (error) {\n    if (error instanceof Error) {\n      console.error('读取配置错误:', error.message);\n    }\n    return {};\n  }\n}\n\nconst config = readConfigSync();\nconsole.log('配置已加载:', config);
\n\n

使用 async/await 进行异步读取(推荐方式)

\n\n

对于生产环境代码,请始终使用异步方法。TypeScript 与 async/await 配合良好:

\n\n
import { readFile } from 'fs/promises';\nimport * as path from 'path';\n\ninterface UserData {\n  id: number;\n  name: string;\n  email: string;\n}\n\nasync function readUserData(fileName: string): Promise<UserData[]> {\n  const filePath = path.resolve('data', fileName);\n  \n  try {\n    const rawData = await readFile(filePath, { encoding: 'utf-8' });\n    const users: UserData[] = JSON.parse(rawData);\n    return users;\n  } catch (error) {\n    if (error instanceof Error) {\n      throw new Error(`无法读取文件 ${fileName}:${error.message}`);\n    }\n    throw error;\n  }\n}\n\n// 使用\n(async () => {\n  try {\n    const users = await readUserData('users.json');\n    console.log(`已加载 ${users.length} 个用户`);\n  } catch (error) {\n    console.error(error);\n  }\n})();
\n\n

写入和更新文件

\n\n

创建和覆盖文件

\n\n

要将数据写入文件,请使用 writeFile 方法。如果文件不存在,它会创建文件;如果文件已存在,则会覆盖:

\n\n
import { writeFile, mkdir } from 'fs/promises';\nimport * as path from 'path';\n\ninterface LogEntry {\n  timestamp: string;\n  level: 'info' | 'warn' | 'error';\n  message: string;\n}\n\n                

博客

书籍推荐