如何使用VSCode同款TypeScript格式化工具批量处理TS文件?
问题解答
VSCode内置的TypeScript代码格式化工具没有单独的独立CLI版本,但它底层依赖的是TypeScript官方的代码格式化能力,你可以通过现成的CLI工具实现和内置工具一致的格式化效果,并且递归处理文件夹下的所有TS文件,具体方案如下:
可行实现方案
方法一:使用tsfmt工具(与VSCode内置格式化逻辑一致)
- 安装工具:全局安装基于TypeScript官方格式化API开发的
tsfmtnpm install -g tsfmt - 递归格式化TS文件:在目标文件夹根目录执行命令,即可递归处理所有TS文件
tsfmt -r .- 若需自定义格式化规则(如缩进、换行符等),可在项目根目录创建
tsfmt.json配置文件,配置项与VSCode中typescript.format.*参数对应,示例:{ "indentSize": 2, "tabSize": 2, "newLineCharacter": "\n", "convertTabsToSpaces": true }
- 若需自定义格式化规则(如缩进、换行符等),可在项目根目录创建
方法二:使用TypeScript官方API编写自定义脚本
若不想依赖第三方工具,可自行编写简单Node.js脚本实现:
- 确保项目已安装TypeScript
npm install --save-dev typescript - 创建格式化脚本(如
format-ts.js)const fs = require('fs'); const path = require('path'); const ts = require('typescript'); // 定义格式化配置(与VSCode内置配置对应) const formatOptions = { indentSize: 2, tabSize: 2, convertTabsToSpaces: true, newLineCharacter: '\n' }; // 递归遍历文件夹处理TS文件 function formatDirectory(dir) { const files = fs.readdirSync(dir); files.forEach(file => { const fullPath = path.join(dir, file); const stats = fs.statSync(fullPath); if (stats.isDirectory()) { formatDirectory(fullPath); } else if (path.extname(file) === '.ts') { const content = fs.readFileSync(fullPath, 'utf8'); const sourceFile = ts.createSourceFile(file, content, ts.ScriptTarget.Latest, true); const formattedContent = ts.formatCode(content, formatOptions, { getSourceFile: (fileName, languageVersion) => fileName === file ? sourceFile : undefined }); fs.writeFileSync(fullPath, formattedContent); console.log(`格式化完成:${fullPath}`); } }); } // 执行格式化,传入目标文件夹路径(当前目录) formatDirectory(process.cwd()); - 运行脚本
node format-ts.js
方法三:使用VSCode的CLI命令(间接方式)
VSCode本身提供CLI命令,可调用内置格式化功能:
- 确保VSCode已添加到系统PATH
- 执行格式化命令
该命令会打开VSCode并自动格式化当前目录下所有支持的文件(含TS文件),完成后可关闭窗口,适合无需完全后台运行的场景。code --format .
内容的提问来源于stack exchange,提问作者cshu
相关产品推荐
相关产品推荐

